Skip to main content

Alles für die Homepage... Scripte, Templates, Workshops und Support

Regex Sammlung

In diesem Artikel werden verschiedenste Reguläre Ausdrücke (engl. Regular expression), nach Themenschwerpunkten getrennt, aufgelistet. Reguläre Ausdrücke sind ein wichtiges Mittel um z.B. Benutzereingaben zu prüfen oder Daten zu entschärfen bzw. zu korrigieren/ändern.

Testen eines Datums mittels Regex

Nimmt man aus Selectfeldern oder einfachen Eingabeformularfeldern eine Datumsangabe entgegen, z.B. 2008-08-16, ist das prüfen auf Gültigkeit mittels eines Regexes keine triviale Aufgabe. So können z.B. verschiedene Trennzeichen vorkommen, es gibt Schaltjahre odr ganz einfach Tippfehler. Einen Datum 2008-16-08 kann es ja, sofern die Reihenfolge Jahr-Monat-Tag ist, nicht geben.

Dieser Regex testet Datumswerte von 1583 bis 9999. Vorher galt ein anderer Kalender, wollte man diesen hier noch mit einbauen würde das den Rahmen sprengen.

CODE:
$eingabe = '2004-02-29';

// nur Zahlen erlauben
if (preg_match('/^(?:(?:[2468][048]|16|[3579][26])(?:[02468][048]|[13579][26])|(?:[2468][1-35-79]|1[789]|[3579][013-57-9])(?:0[48]|[2468][048]|[13579][26])|15(?:88|9[26]))([-.\/]?)02\1 29|(?:[2-9]\d\d\d|1[6-9]\d\d|159\d|158[3-9])([-.\/]?)(?:(?:0[13578]|1[02])\2(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)\2(?:0[1-9]|[12]\d|30)|02\2(?:0[1-9]|1\d|2[0-8]))$/x', $eingabe)) { 
echo "OK, $eingabe passt";
} else {
echo "Ooops Fehler, $eingabe passt nicht, Datumsformat, bzw. Datumsbereich falsch.";
}

 

Der Regex mit Komentaren:

CODE:
(?:                                              # 29. feb. im schaltjahr
(?:[2468][048]|16|[3579][26])                   # jahrhundert durch 4 teilbar
(?:[02468][048]|[13579][26])                    # jahr durch 4 teilbar
|
(?:[2468][1-35-79]|1[789]|[3579][013-57-9])     # jahrhundert nicht durch 4 teilbar
(?:0[48]|[2468][048]|[13579][26])               # jahr durch 4 teilbar ausser volle jahrhunderte
|
15(?:88|9[26])                                  # beachtung der einfuehrung des gregor. kalenders
)
([-.\/]?)                                         # separator \1
02\1 29                                           # 29. feb.; wiederholung des separators \1
|
(?:[2-9]\d\d\d|1[6-9]\d\d|159\d|158[3-9])        # beliebiges jahr, ab 1583
([-.\/]?)                                         # separator \2
(?:
(?:0[13578]|1[02])                              # langer monat
\2                                              # wiederholung \2
(?:0[1-9]|[12]\d|3[01])                         # 01 bis 31
|
(?:0[469]|11)                                   # kurzer monat
\2                                              # wiederholung \2
(?:0[1-9]|[12]\d|30)                            # 01 bis 30
|
02                                              # februar
\2                                              # wiederholung \2
(?:0[1-9]|1\d|2[0-8])                           # 01 bis 28
)

Hinweis: Für PHP gibt es die Funktion checkdate, diese kann Datumsbereiche vom Jahr 1 – 32767 testen.

CODE:
checkdate (08, 16, 2008);

Das macht obigen Regex eigentlich überflüssig, allerdings zeigt dieser eindrucksvoll was mit Regexen alles möglich ist.

Weitere Informationen

Anzeige


Ähnliche Beiträge



Keine Kommentare vorhanden


Du hast eine Frage oder eine Meinung zum Artikel? Teile sie mit uns!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *