Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann mein PHP-Regex ein ISO-Datumsformat nicht validieren?
Regex kann ISO-Datumsformat nicht validieren
Frage:
Warum ist das nicht der Fall? folgt einem regulären Ausdruck, der mit Datumsangaben im ISO-Stil übereinstimmen soll und funktioniert als erwartet?
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1) // ...
Antwort:
Während der reguläre Ausdruck selbst gültig ist, liegt das Problem hier in der Verwendung von Schrägstrichen " /" als Trennzeichen. PHP erfordert doppelte Anführungszeichen " oder einfache Anführungszeichen ' als Trennzeichen für reguläre Ausdrücke, keine Schrägstriche.
Um dieses Problem zu beheben, ersetzen Sie die Schrägstriche durch doppelte Anführungszeichen:
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1) // ...
Jetzt die regulären Der Ausdruck stimmt korrekt mit Datumsangaben im ISO-Stil überein.
Vorteile der Verwendung von DateTime Klasse:
Obwohl der korrigierte reguläre Ausdruck ISO-Daten validiert, lohnt es sich, die DateTime-Klasse für die Validierung und Manipulation von Datum und Uhrzeit in Betracht zu ziehen. Die DateTime-Klasse ist umfassender und kann ein breites Spektrum an Datums- und Uhrzeitangaben verarbeiten Zeitformate.
Das folgende Beispiel zeigt, wie die DateTime-Klasse verwendet wird, um ein Datum im ISO-Stil zu validieren:
function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; }
Das obige ist der detaillierte Inhalt vonWarum kann mein PHP-Regex ein ISO-Datumsformat nicht validieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!