私の正規表現パターンが「u」フラグでは機能するのに、「v」フラグでは機能しないのはなぜですか?

Patricia Arquette
リリース: 2024-10-28 05:01:02
オリジナル
150 人が閲覧しました

Why Does My Regex Pattern Work with the 'u' Flag but Not the 'v' Flag?

「v」フラグを含む正規表現の制限: メタ文字のエスケープ

「u」フラグは有効であるが有効ではない正規表現パターンに関するコンソール警告が表示されました。 「v」フラグ。この問題について詳しく見てみましょう。

はじめに

HTML では、パターン属性内の RegExp オブジェクトをコンパイルするときに、'v' フラグが自動的に追加されます。このフラグは、正規表現パターンでの文字エスケープに対してより厳しい制限を適用します。

「-」文字のエスケープ

「u」フラグと「v」フラグの主な違いの 1 つは、「-」の処理です。 ' キャラクター。 「u」フラグを使用すると、「-」文字を文字クラスの末尾にリテラル文字として使用できます。ただし、文字クラスの減算と交差を許可する「v」フラグを使用すると、リテラルの「-」文字をエスケープする必要があります。

エラーの解決

指定された正規表現には「-」が含まれています。文字クラスの末尾の文字: [a-zA-Z0-9 _.-]。このパターンを「v」フラグで有効にするには、「-」文字をバックスラッシュでエスケープします: [a-zA-Z0-9 _.-]。

使用例

「-」文字をエスケープした場合とエスケープしない場合の動作の比較は次のとおりです:

<code class="js">console.log(/^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/u.test("[email&#160;protected]")); // true, using 'u' flag
console.log(/^[a-zA-Z0-9+_.\-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/v.test("[email&#160;protected]")); // false, using 'v' flag without escaping '-'
console.log(/^[a-zA-Z0-9+_.\-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/v.test("[email&#160;protected]")); // true, using 'v' flag with escaped '-'</code>
ログイン後にコピー

結論

この記事では、「u」フラグと「v」フラグの動作の違いについて説明します。 HTML の pattern 属性とともに使用する場合の正規表現パターン。無効なパターンを避けるために「v」フラグを使用する場合は「-」文字をエスケープする必要があることを強調しています。

以上が私の正規表現パターンが「u」フラグでは機能するのに、「v」フラグでは機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!