Heim > Backend-Entwicklung > PHP-Tutorial > Warum schlägt mein PHP preg_match() nach dem Upgrade auf PHP 7.3 mit der Fehlermeldung „Ungültiger Bereich in der Zeichenklasse' fehl?

Warum schlägt mein PHP preg_match() nach dem Upgrade auf PHP 7.3 mit der Fehlermeldung „Ungültiger Bereich in der Zeichenklasse' fehl?

Barbara Streisand
Freigeben: 2024-12-15 10:00:21
Original
494 Leute haben es durchsucht

Why is my PHP preg_match() failing after upgrading to PHP 7.3 with a

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
Nach dem Login kopieren

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
Nach dem Login kopieren

Lösung:

Um den Kompilierungsfehler zu beheben, stellen Sie sicher, dass das Zeichen mit Bindestrich versehen ist Der Unterricht folgt diesen Regeln:

  • Verwenden Sie den Bindestrich an der Anfangs- oder Endposition Nur.
  • Escapen Sie den Bindestrich mit einem Backslash (), wenn er an einer anderen Position erscheint.

Zusätzliche Informationen:

  • Die offizielle PHP-Dokumentation für Unicode-Eigenschafts-Escapes erklärt, dass frühere Versionen von PCRE den Bindestrich an jeder Stelle eines Zeichens als Literalzeichen behandelten Klasse.
  • Mit PCRE2 wird jetzt ein spezifischer Fehler für ungültige Zeichenklassenbereiche ausgelöst, wodurch das Problem klarer wird.
  • Für PHP-Versionen vor 7.3 besteht die Problemumgehung darin, den Bindestrich zu maskieren, aber Dies ist in PHP 7.3 und höher nicht mehr erforderlich.

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage