Heim >Backend-Entwicklung >PHP-Tutorial >Warum stimmt mein PHP ISO-Datum mit regulären Ausdrücken nicht überein?

Warum stimmt mein PHP ISO-Datum mit regulären Ausdrücken nicht überein?

DDD
DDDOriginal
2024-12-13 05:39:08672Durchsuche

Why Isn't My PHP ISO Date Regular Expression Matching?

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:

  1. Korrekte Trennzeichen: Verwenden Sie doppelte Anführungszeichen ("), um den regulären Ausdruck einzuschließen Text:
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)
  1. Einfache Anführungszeichen innerhalb des Ausdrucks: Wenn Sie einfache Anführungszeichen innerhalb des regulären Ausdrucks verwenden müssen, maskieren Sie diese mit einem Backslash ():
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn