Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlägt mein „preg_match()' nach einem PHP-Upgrade fehl?

Warum schlägt mein „preg_match()' nach einem PHP-Upgrade fehl?

Susan Sarandon
Susan SarandonOriginal
2024-12-18 19:40:15885Durchsuche

Why Does My `preg_match()` Fail After a PHP Upgrade?

preg_match()-Kompilierungsfehler im Zeichenklassenbereich aufgrund eines PHP-Upgrades

Der Fehler „preg_match(): Kompilierung fehlgeschlagen: ungültiger Bereich in „Zeichenklasse am Offset“ tritt häufig auf, wenn die preg_match-Funktion von PHP zur Validierung alphanumerischer Benutzernamen verwendet wird. Es wurde berichtet, dass dieser Fehler nach PHP-Upgrades auf Servern auftritt.

Das Problem ist auf die jüngsten Änderungen zurückzuführen, die in PHP 7.3 und neueren Versionen eingeführt wurden. PHP hat seine PCRE-Engine auf PCRE2 migriert, was eine strengere Mustervalidierung mit sich bringt. Konkret geht es um die Verwendung von Bindestrichen (-) in Zeichenklassen.

In PHP-Versionen vor 7.3 war es möglich, Bindestriche in Zeichenklassen zu verwenden, indem man sie maskiert oder am Anfang oder Ende platziert Reichweite. In PHP 7.3 und höher hat die PCRE2-Engine diese Anforderung jedoch verschärft.

Der Fehler tritt auf, weil der Bindestrich in der Zeichenklasse [a-z0-9]([0-9a-z_-s]) $ liegt weder am Anfang noch am Ende des Bereichs. Dies führt dazu, dass die Kompilierung fehlschlägt.

Um das Problem zu beheben, sollten Sie die Zeichenklasse wie folgt ändern:

/[a-z0-9]([0-9a-z-_ ]+)+/i

Indem Sie den Bindestrich am Ende des Bereichs platzieren, wird dies der Fall sein Wird als Literalzeichen innerhalb der Klasse interpretiert, anstatt einen Bereich anzugeben.

Es ist wichtig zu beachten, dass mit dem Update auf PHP möglicherweise andere Änderungen der Mustersyntax eingeführt wurden 7.3. Weitere Informationen zu diesen Änderungen und wie sie sich auf Ihren Code auswirken könnten, finden Sie in der offiziellen PHP-Dokumentation zur PCRE2-Migration.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein „preg_match()' nach einem PHP-Upgrade fehl?. 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