RegEx: Wiedermal das Preis pattern :D

Scorp1337

Erfahrenes Mitglied
Hallo! :)
Ich glaube ich mache jetzt schon zum vierten mal einen Thread zu RegEx auf, aber irgendwie funktioniert das ding ständig nicht so wie ich möchte....

Code:
/^(?:[0-9]|[1-9][0-9]{1,3})(?:\.[0-9]{2})?$/

Ich Brauche eine Pattern, das auf alles Zutrifft das einem Preis ähnelt....
Das ganze ist nur aus "ästetischen" Gründen hinzugefügt worden, da aus einer DB Preise rauskommen und manche nur eine oder gar keine Nachkommastelle haben.

Deshalb ist es so, dass wenn das Pattern nicht zutrifft an den Preis hinten eine Null rangehängt wird.

Deshalb soll mein Pattern auf alle Preise zutreffen, die von 0.1 bis 1999.9 gehen. Natürlich jeweils mit mind. eine Stelle vor dem . (entweder 1x[0-9] oder [1] + 3x[0-9]) und 2 oder 0 stellen nach dem punkt.

Lieg ich da richtig?
Aber warum geht mein Pattern nicnht? ...irgendwie bin ich da immernoch nicht ganz durchgestiegen (bei RegEx).
 
Weil es eine ~380 Zeilen Datei ist, in der ich nur fix das Pattern abändern will, da der Aufwand nicht Lohnt das jetzt überall zu "begradigen".
 
Der reguläre Ausdruck passt eigentlich genau auf die beschriebene Sprache (bis auf dass nur einstellige Zahlen mit einer Null beginnen dürfen). Wie verwendest du das Suchmuster denn?
 
Probier es mal mit diesem Regex:

Code:
(?:(?:[0-9]){1,12}([^\.|\,]|[\.|\,])(\d){1,2})

Dadurch bekomme ich bei:
11€ => 110€
3.5€ => 3.5€
2.19 => 2.19€

Also scheint es nicht so zu sein, wie ich es möchte :(

Der Ausdruck soll quasi nur nicht zutreffen, wenn eine nachkommastelle ist, da dann quasi "false" rauskommt und hinter dem string eine 0 angefügt wird.
 
Wieso nimmst du nicht einfach die sprintf()- oder money_format()-Funktion zum Formatieren des Werts?
 
Da ich ehrlich gesagt im moment nicht weiß, was genau du möchtest, aber trotzdem was geschrieben habe, kann ich nicht versprechen, dass das folgende Script genau das macht, was du möchtest..

PHP:
<?php

function checknum($num)  {

$num = htmlspecialchars($num);
$r = false;

$r = preg_match('/(?:(?:[0-9]){0,12}([^\,|\.]|[\,|\.](\d){1}))/', $num) ? true : false;
$split = $r == true ? explode(',', $num) : NULL;
      
$r = $split !== NULL && $r == true 
     ? (strlen($split[1]) > 0 ? false : true) : false; 
// Überprüft ob nach der Kommastelle mehr als 0 ist oder nicht

return $r;

}

/* echo checknum(0,1); */

function formatnum($num) {

$num = htmlspecialchars($num);

$split = explode(',', $num);

$r = $split[0].substr($split[1], 0,1).',0';

return $r;

}

// echo formatnum('5,15');

?>
 
Zuletzt bearbeitet:
Zurück