Warum stimmt mein ISO-Datumsmuster nicht überein?
Der angegebene reguläre Ausdruck:
/^([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})$/
ist entworfen um Datumsangaben im ISO-Stil im Format „JJJJ-MM-TT HH:MM:SS“ abzugleichen. Es wird jedoch „false“ zurückgegeben, obwohl die Kriterien erfüllt sind. Das Problem liegt in den Schrägstrichen (/), die den Ausdruck einschließen.
PHP-Trennzeichen für reguläre Ausdrücke
In PHP müssen reguläre Ausdrücke in Trennzeichen eingeschlossen werden, typischerweise Schrägstriche (/ ), aber auch doppelte Anführungszeichen (") können verwendet werden. Das /-Trennzeichen wird verwendet, um den Anfang und das Ende eines regulären Ausdrucks zu definieren und um Konflikte mit anderen Sonderausdrücken zu verhindern Zeichen innerhalb des Ausdrucks.
Problem lösen
Um das Problem zu beheben, stellen Sie Folgendes sicher:
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)
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)
Alternative Option mit DateTime Klasse
Anstatt einen regulären Ausdruck zu verwenden, sollten Sie die Verwendung der PHP-DateTime-Klasse in Betracht ziehen, die robustere und zuverlässigere Funktionen zur Datumsvalidierung und -manipulation bietet:
function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; }
Diese Funktion gibt true zurück für gültige Daten und false für ungültige. Es kann zur Validierung von Daten in verschiedenen Formaten verwendet werden, einschließlich ISO.
Das obige ist der detaillierte Inhalt vonWarum stimmt mein PHP ISO-Datum mit regulären Ausdrücken nicht überein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!