ホームページ >ウェブフロントエンド >jsチュートリアル >HTML パターン属性の「v」フラグにより正規表現パターンが失敗するのはなぜですか?
Unicode フラグを使用した正規表現パターンの有効性
HTML パターン属性の RegExp パターンの問題
HTML パターン属性で「v」フラグを含む正規表現パターンを使用すると、「SyntaxError」エラーが発生する場合があります。このエラーは、パターンを RegExp オブジェクトにコンパイルするときに「v」フラグが自動的に適用されるために発生します。
文字クラスの減算とエスケープ
「v」フラグにより、より厳格なエスケープ規則。文字クラスの末尾にリテラルの「-」文字を使用することは許可されません。これは、そのような制限がない「u」フラグとは対照的です。
「u」および「v」フラグを使用した正規表現パターン
次のことを考慮してください。正規表現パターン:
^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
「u」フラグを適用した場合:
<code class="js">console.log(/^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/u.test("[email protected]")); // true</code>
「v」フラグを適用した場合 (HTML パターン属性で自動的に):
<code class="js">console.log(/^[a-zA-Z0-9+_.\-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/v.test("[email protected]")); // SyntaxError</code>
解決策
エラーを解決するには、文字クラスの末尾にある「-」文字をエスケープする必要があります。修正されたパターンは次のとおりです。
^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$
このパターンは、「v」フラグの有無にかかわらず正しく動作するようになりました。
以上がHTML パターン属性の「v」フラグにより正規表現パターンが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。