Betrag auf Richtigkeit prüfen (preg_match)

k3nguruh

Erfahrenes Mitglied
Hallo,

vll kann mir einer helfen und den unteren Code so (ab)ändern, dass auch Beträge die mit "sinnfreien" Nullen beginnen, also zum Bsp. 001.45 oder 00.45 , ebenfalls als FALSCH erkannt werden.

PHP:
$betrag = "001.45";

echo (isValidBetrag($betrag) ? "TRUE" : "FALSE") ;

function isValidBetrag($betrag) {
    return preg_match("/^\d+\.\d{2}$/i", $betrag);
}

Bin nicht gerade die Leuchte mit den ganzen Regexp (Dingens).... usw. In diesem Zuge: Gibt es vll. eine Gute Seite, die dass an mehrenen Beispielen erklärt? Nur mit den Hilfen auf php.net und deren Kopien ist mir die ganze Sache immer noch ziemlich unklar.

Besten Dank
Mfg Kenguruh2002
 
Hallo,

wenn ich dich richtig verstehe, sollte folgende Lösung funktionieren:
PHP:
$betrag = "001.45";

echo (isValidBetrag($betrag) ? "TRUE" : "FALSE") ;

function isValidBetrag($betrag) {
    return preg_match("/^[1-9]\d+\.\d{2}$/i", $betrag);
}

Gruß
xilence
 
@Maniac: Danke für den Link, hat mich doch einiges weiter gebracht

@xilence: leider nicht. Wenn man $betrag = "1.45"; ergibt das auch FALSE

Falgendes habe ich jetzt hinbekommen. Ob es noch besser geht weiss ich nicht, es erfüllt aber dass was es soll.

PHP:
function isValidBetrag($betrag) {
    return preg_match("/^([0]{1}|[1-9]{1}[0-9]*)\.\d{2}$/i", $betrag);
}
 
Habt Ihr schon mal was vom Type-Casts gehört****

$betrag = (double)'001110.45';

echo $betrag; // Ausgabe 1110.45
 
@napofis: und was ist wenn ein Betrag von 00u1110.45 eingegeben wird?

PHP:
$betrag = (double)'00u1110.45';
echo $betrag; // Ausgabe 0

jetzt weiss man nicht ob der Betrag Vertippt eingegeben wurde, oder doch 0 (Euro) gemeint ist.

#########################################

Zum Abschluss jetzt noch die richtige Form....
Das {1} kann man sparen, ohne Qualifier darf das entsprechende Zeichen oder die Zeichenklasse genau einmal vorkommen. Dazu kann man dann noch [0] durch 0 ersetzen. Und dann, einfach der Aesthetik wegen, entweder beide Male \d oder beide Male [0-9], also:

PHP:
function isValidBetrag($betrag) {
    return preg_match("/^(0|[1-9]\d*)\.\d{2}$/i", $betrag);
}

bzw.

PHP:
function isValidBetrag($betrag) {
    return preg_match("/^(0|[1-9][0-9]*)\.[0-9]{2}$/i", $betrag);
}
 
@napofis: und was ist wenn ein Betrag von 00u1110.45 eingegeben wird?
Das hättest du etwas eher sagen können aber wenn du von so etwas aus gehst kann man den Faden weiter spinnen.

1,76 wäre hier in Deutschland auch eine gültige Eingabe oder
1.234,75 oder die englische Schreibweise
1,234.75

Dein Ausdruck würde auf keinen dieser Eingaben passen obwohl sie richtig sind und wozu du das i-Flag brauchst versteh ich auch nicht, für Zahlen gibt es keine Klein- und Großschreibung.
 
Zuletzt bearbeitet:
Zurück