Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlägt „preg_match()' nach einem PHP-Upgrade mit „Ungültiger Bereich in Zeichenklasse' fehl?

Warum schlägt „preg_match()' nach einem PHP-Upgrade mit „Ungültiger Bereich in Zeichenklasse' fehl?

DDD
DDDOriginal
2024-12-09 01:11:10623Durchsuche

Why Does `preg_match()` Fail with

preg_match(): Ungültiger Bereich in der Zeichenklasse nach PHP-Upgrade

Der Fehler „preg_match(): Kompilierung fehlgeschlagen: ungültiger Bereich im Zeichen.“ Klasse am Offset“ tritt typischerweise auf, wenn ein Bindestrich (-) innerhalb einer Zeichenklasse in einem regulären Ausdruck falsch verwendet wird.

Im bereitgestellten Codeausschnitt:

else if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){

Innerhalb der Zeichenklasse [0-9a-z_-s] gibt es einen Bindestrich „-“. In älteren PHP-Versionen war die Verwendung möglich, indem man den Bindestrich mit einem Backslash maskierte oder ihn am Anfang oder Ende der Zeichenklasse platzierte.

PHP 7.3 und PCRE2-Änderungen

Mit PHP 7.3 und der Migration auf die PCRE2-Bibliothek ist die Verwendung des Bindestrichs jedoch eingeschränkter. In PCRE2 können Bindestriche nur am Anfang oder Ende einer Zeichenklasse verwendet werden.

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

else if(!preg_match("/^[a-z0-9]([0-9a-z_0-9_-])+$/i", $subuser)){

Dadurch wird der Bindestrich an platziert am Anfang der Zeichenklasse, damit diese korrekt verwendet werden kann.

Zusätzlich Hinweise

  • Das Maskieren des Bindestrichs mit , wie in der bereitgestellten Antwort vorgeschlagen, ist in PHP 7.3 und höher nicht mehr erforderlich.
  • Die PCRE2-Bibliothek führt möglicherweise regelmäßig andere Änderungen ein Ausdruckssyntax. Es ist wichtig, die Dokumentation zu lesen und notwendige Anpassungen an Ihrem Code vorzunehmen, wenn Sie auf PHP 7.3 oder höher aktualisieren.

Das obige ist der detaillierte Inhalt vonWarum schlägt „preg_match()' nach einem PHP-Upgrade mit „Ungültiger Bereich in Zeichenklasse' 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