Hi!
if(!preg_match("/^\d{3}$/", $_POST["height"])) {
Dieser Ausdruck will unbedingt eine dreistellige Zahl haben, also auch 000. 42 wäre jedoch ungültig. So wolltest du das doch aber nicht, oder?
Meine andere Abfrage für eine reelle Zahl funzt nicht wirklich, es darf also nur "123", "123.45" oder "123,45" eingegeben werden. Wie kann ich noch die Zahlenmengen um das Komma begrenzen, also vielleicht maximal 3 Stellen vor und maximal 2 Stellen nach dem Komma? [...]
[code lang=php]if(!preg_match("/^\d{1,3}[.,]\d{1,2}$/", $_POST["height"])) {
Das entspricht nicht ganz der Aufgabenstellung, es sei denn, du prüfst "123" bereits mit dem anderen Ausdruck. Wenn du aber beides mit einem Ausdruck prüfen willst, so ist eine Änderung erforderlich. Doch zunächst: [.,] In einer Zeichenklasse verlieren viele der Zeichen ihre Sonderbedeutung. Außer ^ am Anfang und - als Bereichsangabe können alle anderen Zeichen direkt verwendet werden, selbst das schließende ], wenn es als erstes Zeichen oder direkt nach dem Anfangs-^ notiert wird. Es schadet aber auch nicht, ein Zeichen zu maskieren. Das . wirkt also genauso wie wenn du nur [.,] schreibst.
/^\d{1,3}([.,]\d{1,2})?$/
Die ()-Klammerung bewirkt, dass Dezimalzeichen und Nachkommaziffern eine Gruppe bilden. Diese darf aufgrund des folgenden ? weggelassen werden oder genau einmal vorkommen. Somit testet der Ausdruck auf ganze Zahlen mit 1 bis drei Ziffern und reelle mit zwei Nachkommastellen.
Der Codec funzt ganz prima und macht genau was ich von ihm erwarte, Danke.
Ein Codec ist eigentlich was ganz anderes. Wenn das zweite c nur ein Tippfehler ist, dann Schwamm drüber (im doppeldeutigen Sinne).
Lo!