Heim >Web-Frontend >js-Tutorial >Warum schlägt mein Muster für reguläre Ausdrücke mit dem Flag „v' im HTML-Musterattribut fehl?

Warum schlägt mein Muster für reguläre Ausdrücke mit dem Flag „v' im HTML-Musterattribut fehl?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 06:26:02229Durchsuche

Why Does My Regular Expression Pattern Fail with the

Gültigkeit regulärer Ausdrucksmuster mit Unicode-Flags

Probleme mit RegExp-Mustern im HTML-Musterattribut

Wenn Sie ein reguläres Ausdrucksmuster mit dem Flag „v“ in einem HTML-Musterattribut verwenden, kann es zu einem „SyntaxError“-Fehler kommen. Dieser Fehler tritt auf, weil das Flag „v“ beim Kompilieren des Musters in ein RegExp-Objekt automatisch angewendet wird.

Subtraktion und Escapezeichen von Zeichenklassen

Das Flag „v“ führt ein strengere Escape-Regeln, die kein literales „-“-Zeichen am Ende einer Zeichenklasse zulassen. Dies steht im Gegensatz zur „u“-Flagge, bei der es keine solche Einschränkung gibt.

Regex-Muster mit „u“- und „v“-Flags

Bedenken Sie Folgendes Regex-Muster:

^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$

Mit angewendetem „u“-Flag:

<code class="js">console.log(/^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/u.test("[email protected]")); // true</code>

Mit angewendetem „v“-Flag (automatisch im HTML-Musterattribut):

<code class="js">console.log(/^[a-zA-Z0-9+_.\-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/v.test("[email protected]")); // SyntaxError</code>

Lösung

Um den Fehler zu beheben, müssen Sie das „-“-Zeichen am Ende der Zeichenklasse maskieren. Hier ist das korrigierte Muster:

^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$

Dieses Muster sollte jetzt sowohl mit als auch ohne die „v“-Flagge korrekt funktionieren.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein Muster für reguläre Ausdrücke mit dem Flag „v' im HTML-Musterattribut 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