preg_match(): Kompilierung fehlgeschlagen aufgrund eines ungültigen Zeichenklassenbereichs
Die Fehlermeldung „preg_match(): Kompilierung fehlgeschlagen: ungültiger Bereich in Zeichenklasse bei Offset 20“ zeigt an, dass ein reguläres Ausdrucksmuster einen ungültigen Zeichenklassenbereich enthält. In diesem Fall ist das Problem plötzlich nach einem PHP-Upgrade auf dem Server aufgetreten und wir werden die Gründe untersuchen.
Grund für den Fehler:
PHP 7.3 hat die PCRE-Engine (Perl-kompatible reguläre Ausdrücke) auf PCRE2 aktualisiert, was mehrere Änderungen mit sich brachte, darunter eine strengere Validierung von Mustern. Insbesondere das Bindestrichzeichen (-) wird jetzt in Zeichenklassen anders behandelt.
Code-Snippet:
Der bereitgestellte Code verwendet einen regulären Ausdruck zur Validierung von Benutzernamen:
/^[a-z0-9]([0-9a-z_-\s])+$/i
In früheren Versionen von PHP konnte der Bindestrich überall innerhalb einer Zeichenklasse verwendet werden, wenn er mit Escapezeichen versehen oder an einer Stelle platziert wurde, an der er nicht sein konnte wird als Indikator für einen Bereich interpretiert.
Auswirkungen von PHP 7.3:
Mit PCRE2 wird das Escape () in Klassen mit Bindestrichzeichen nicht mehr ignoriert. Das bedeutet, dass in PHP 7.3 und höher der obige Code wie folgt aktualisiert werden sollte:
/^[a-z0-9]([0-9a-z_-]\s)$/i
Lösung:
Um den Kompilierungsfehler zu beheben, stellen Sie sicher, dass das Zeichen mit Bindestrich versehen ist Der Unterricht folgt diesen Regeln:
Zusätzliche Informationen:
Das obige ist der detaillierte Inhalt vonWarum schlägt mein PHP preg_match() nach dem Upgrade auf PHP 7.3 mit der Fehlermeldung „Ungültiger Bereich in der Zeichenklasse' fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!