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!