ereg Regulärerausdruck

Bei mir wird der zweite Beispielwert ebenfalls als falsch evaluiert.

Dass der Rest als wahr durchgeht, liegt übrigens daran, dass die Typenplatzhalter „%u“ bei der Konstruktion des ISO-8601-Datums für NULL-Werte, die bei der sscanf()-Funktion bei Nichtübereinstimmungen herauskommen, zu null („0“) umgewandelt werden. Und das Datum „0-0-0T0:0:0“ scheint als aktuelles Datum interpretiert und somit auch gültig zu sein.
Werden bei der Konstruktion des ISO-8601-Datums die „%u“ durch „%s“ ersetzt, womit die Typkonvertierung nicht stattfinden, rutscht auch nur noch der dritte Beispielwert durch. Und das wiederum liegt daran, dass fälschlicherweise bei der Konstruktion des ISO-8601-Datums zwei mal der Monatswert für jeweils Monat und Tag verwendet wird.

Die nun korrekte Version:
PHP:
($match = sscanf($string, '%u.%u.%u - %u:%u:%u')) && strtotime(sprintf('%s-%s-%sT%s:%s:%s', $match[2], $match[1], $match[0], $match[3], $match[4], $match[5]))

Nachtrag: Die checkdate()-Funktion zu nutzen, ist jedoch besser, da die strtotime()-Funktion beispielsweise den 29. Februar eines Nicht-Schaltjahres als 1. März wertet.
 
Zurück