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