RegEx Prüfung Zeichenanzahl beschränken?

BeaTBoxX

Erfahrenes Mitglied
Hallo zusammen,

ich hab ein kleines Problem, mit sicherlich einfacher Lösung, aber ich weiss nicht wie ichs hinbekommen soll:

Ich habe in meinem Script Felder fuer eine Datumsangabe in der Form TT MM JJJJ.
Wenn das Formular abgeschickt wurde, wollte ich per preg_match() prüfen, ob die jeweiligen $_POST Variablen aus 2 bzw 4 dezimalzahlen bestehen.
Ob es eine Dezimalzahl ist , lässt sich an und fuer sich ja mit \d oder [0-9] abprüfen.
Aber wie verhindere ich, dass ein Tag-String zum Beispiel fuer den 9. eines monats z.B. 090 heissen kann? Im String '090' wird ja eine Zeichenkette mit 2 aufeinanderfolgenden Dezimalzahlen gefunden. Das soll aber nur genau bei 2 (tag und monat) bzw 4 (Jahr) der Fall sein und nicht auch bei mehr als 2 bzw. 4 Zahlen.
Kann mir da jemand helfen?

Mit einem '/[0-9]{2}/' z.B. ist es ja nicht getan .


Danke

Gruß
Frank
 
liegt darran das das 0-9 im regex sich auf zahlen bezieht du ihm aber strings gibst

mach die text zahlen zu echten zahlen und es wird gehen
 
Theoretisch würde es mit folgender RegExp gehen:
PHP:
'/^[0-9]{2}$/'
Dies wäre aber ungenau, da 00, 32-99 auch gematch werden würden. Von daher würde ich für Tag und Monat eher folgende RegExps nehmen:
PHP:
// Tag
'/^(0[1-9]|[1-2][0-9]|3[0-1])$/'
// Monat
'/^(0[1-9]|1[0-2])$/'

Gruß
Marvin
 
Marvin Schmidt hat gesagt.:
Theoretisch würde es mit folgender RegExp gehen:
PHP:
'/^[0-9]{2}$/'
Dies wäre aber ungenau, da 00, 32-99 auch gematch werden würden. Von daher würde ich für Tag und Monat eher folgende RegExps nehmen:
PHP:
// Tag
'/^(0[1-9]|[1-2][0-9]|3[0-1])$/'
// Monat
'/^(0[1-9]|1[0-2])$/'

Gruß
Marvin

Danke dabei hab ich was gelernt nun =)
Wenn du mir noch erklärst was genau das $-Zeichen bewirkt, wär ich gluecklich :D


Gumbo hat gesagt.:
Du kannst auch die Eingabe zusätzlich mittels checkdate() prüfen, ob es eine gültige Datumsangabe ist.


Und DAS war ja einfach =)

Danke nochmals


Gruß
Frank
 
$ bezieht sich auf das Ende der Zeichenkette.

^......$ matcht also nur, wenn die Zeichenkette von Anfang bis Ende dem Regex-Ausdruck entspricht.
 
Zurück