[PHP] Überprüfen ob Text ein Datum ist - RegEx Pattern

Drucken
( 6 Votes )
Hauptkategorie: Programmieren Kategorie: PHP
Erstellt am 02.04.2012 Zuletzt aktualisiert am 09.08.2012 Geschrieben von Jonny132
Ist man mit der Webprogrammierung beschäftigt, kommt man schnell mal an den Punkt an dem man Usereingaben überprüfen muss, bzw. sicherstellen ob das eingegebene auch das richtige Format / valide ist. Dies bewerkstelligt man mittels RegEx (Regular Expression). Zur veranschaulichung zeige ich euch wie man ein Datum, das exakt das Format JJJJ-MM-TT (also Jahr-Monat-Tag) haben muss mit RegEx überprüft. Hier können Sie die Regular Expression schonmal testen.
Dafür gehen wir Schritt für Schritt vor. 

Pattern für das Jahr
Regeln
: Das Jahr muss mit 19 oder 20 beginnen für das 19. und 20 Jahrhundert, gefolgt von 2 Ziffern zwischen 0 und 9 für den Bereich 00-99. 
(19|20) - 19. oder 20. Jahrhundert. Mittels 'PIPE' erzeugen wir eine ODER-Verknüpfung.
[0-9]{2} - In den Eckigen klammern geben wir den Zeichenbereich an der Verwendet werden darf. In diesem Fall nur die Zahlen 0-9. In der geschweiften Klammer geben wir an wie oft diese Zahl vorkommen muss. Daraus erzeugen wir einen Zahlenwert zwischen 00 und 99. Hängen wir diese 2 Pattern zusammen, haben wir das Pattern für eine Jahresabfrage.
Ergebnis: (19|20)[0-9]{2}

Pattern für den Bindestrich
[-] - In der Eckigen Klammer geben wir an welches Zeichen folgen muss.

Pattern für den Monat
Regeln: Es muss entweder eine Eingabe sein die mit 0 beginnt, gefolgt von einer Zahl zwischen 1-9 für die Monate Januar - September ODER eine Eingabe beginnend mit einer 1 gefolgt von einer 0,1 oder 2 für die Monate Oktober - Dezember.
0[1-9] - Monat Januar - September
1[012] - Monat Oktober - Dezember
Ergebnis: (0[1-9]|1[012]) - Die zwei Pattern wurden wiederrum mit einem logischen ODER verknüpft.

Pattern für den Tag
Regeln: Es muss entweder eine Eingabe sein die mit einer 0 beginnt, gefolgt von einer Zahl zwischen 1-9 für die Tage 01-09 ODER eine Eingabe beginnend mit einer 1 oder 2 gefolgt von einer Zahl zwischen 0-9 für die Tage 10-29 ODER beginnend mit einer 3 gefolgt von einer 0 oder 1 für die Tage 30 oder 31.
0[1-9] - Tag 01 - 09
[12][0-9] - Tag 10 - 29
3[01] - Tag 30 - 31
Ergebnis: 0[1-9]|[12][0-9]|3[01] - Die drei Pattern werden wieder mittels einem logischen Oder verknüpft.

Nun haben wir alle Pattern um eine Datumseingabe auf richtigkeit Abfragen zu können. Zusammengesetzt sieht das Pattern so aus:

Das /^ und $/ jeweils am Anfang und Ende dient dem Pattern dazu, dass der zu überprüfende Text exakt diesem Pattern entspricht. Das heisst dass Zuvor UND Danach kein weiterer Text stehen darf.

Und so überprüft man einen Text mittels PHP nach einem Pattern mit RegEx:  
$pattern = '/^(19|20)[0-9]{2}[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$/';
if(preg_match($pattern, '1999-03-23'))
{
  echo "Korrektes Format";
}
else
{
  echo "Fehlerhaftes Format";
}

  • Unbekannt

    schrieb am 2014-03-13 20:24:06

    Sehr gutes Tutorial!

    Auf Kommentar antworten

  • Phillip

    schrieb am 2012-04-13 13:16:50

    Danke hat mir sehr geholfen!
    Jetzt verstehe ich das mit dem RegEx auch besser (war mir bisher immer ein totales Rätsel^^)

    Auf Kommentar antworten

Veröffentlichen Sie ihre Kommentare ...