Hallo,
Zum einen muss ich in einem Feld eine ganze Zahl prüfen, mache ich mit:
if (!eregi("^[0-9]{3}", $_POST["height"]))
also müssen die Zahlen immer dreistellig eingegeben werden. Das heißt, "0" ist ebenso verboten wie "42", "007" ist aber in Ordnung. Möchtest du die Stellenzahl nicht flexibel halten?
Meine andere Abfrage für eine reelle Zahl funzt nicht wirklich, es darf also nur "123", "123.45" oder "123,45" eingegeben werden.
Also bis zu drei Stellen vor dem Dezimalpunkt, bis zu zwei danach.
if (!eregi("^[0-9]+\.[0-9]{0,2}", $_POST["weight"]))
Wie kann ich noch die Zahlenmengen um das Komma begrenzen, also vielleicht maximal 3 Stellen vor und maximal 2 Stellen nach dem Komma?
Die Dezimalstellen hast du doch schon auf 0..2 eingeschränkt; warum nicht die Vorkommastellen auf 1..3 festlegen? Außerdem erlaubt der obige Ausdruck natürlich auch die Eingabe von "23901258.7" oder "2.", aber nicht "120" (weil der Punkt zwingend gefordert ist) oder ".25" (weil mindestens eine Stelle vor dem Punkt gefordert ist). Schade eigentlich ...
Ich würde die Eingabe von Zahlenwerten übrigens nicht mit einem RegEx prüfen, sondern einfach mit intval() oder floatval() die Eingabe wandeln, dann nur den rein numerischen Wertebereich abprüfen und erst bei der Ausgabe wie gewünscht formatieren.
Dann kann es dir nämlich auch egal sein, wenn jemand einen Tick für Hexadezimalzahlen hat und "0x64" eingibt, oder wenn jemandem die Kurzschreibweise ohne führende Null gefällt und er deshalb ".4" eingibt.
So long,
Martin
PCMCIA: People Can't Memorize Computer Industry Acronyms