メールアドレスの形式に一致する次の正規表現があります。
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$
これは、JavaScriptを使用したフォームでの検証に使用されます。ただし、これはオプションのフィールドです。したがって、この正規表現をメールアドレス形式または空の文字列に一致するように変更するにはどうすればよいですか?
私の限られた正規表現の知識から、私は\b
は空の文字列に一致し、|
は「または」を意味するため、次のことを試みましたが、うまくいきませんでした。
^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
pattern
または空の文字列に一致させるには、使用します
^$|pattern
^
と$
は、それぞれ文字列アンカーの始まりと終わりです。|
は、代替を示すために使用されます。 this|that
。\b
で\b
は、ほとんどのフレーバーで「ワード境界」アンカーです。これは幅がゼロの一致、つまり空の文字列ですが、非常に特定の場所、つまりWordの境界にある文字列にのみ一致します。
つまり、\b
は次の場所にあります。
\w
と\W
(どちらかの順序)の間:^
と\w
の間\w
で始まる場合は文字列の先頭\w
と$
の間\w
で終わる場合は文字列の末尾これは仕様によっては簡単ではありません。
別の方法として、キャプチャしない括弧に正規表現を配置します。次に、?
修飾子を使用してその式をオプションにします。これは、キャプチャされていないグループの0(空の文字列)または1インスタンスを検索します。
例えば:
/(?: some regexp )?/
あなたの場合、正規表現は次のようになります。
/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/
|
「または」演算子は不要です!
ここ はJavaScriptの正規表現構文に関するMozillaのドキュメントです。
オプションのメールアドレスを検証する理由がわかりませんが、使用することをお勧めします
^$|^[^@\s]+@[^@\s]+$
意味
^$ empty string
| or
^ beginning of string
[^@\s]+ any character but @ or whitespace
@
[^@\s]+
$ end of string
とにかく偽のメールを停止することはありません。この方法で有効なアドレスを停止することはありません。
\ bはWordの境界に一致します。空の文字列に^ $を使用できると思います。