web-dev-qa-db-ja.com

パターンに一致する、または空の文字列である正規表現

メールアドレスの形式に一致する次の正規表現があります。

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

これは、JavaScriptを使用したフォームでの検証に使用されます。ただし、これはオプションのフィールドです。したがって、この正規表現をメールアドレス形式または空の文字列に一致するように変更するにはどうすればよいですか?

私の限られた正規表現の知識から、私は\bは空の文字列に一致し、|は「または」を意味するため、次のことを試みましたが、うまくいきませんでした。

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
61
Curt

patternまたは空の文字列に一致させるには、使用します

^$|pattern

説明

  • ^$は、それぞれ文字列アンカーの始まりと終わりです。
  • |は、代替を示すために使用されます。 this|that

参照資料


\b

\bは、ほとんどのフレーバーで「ワード境界」アンカーです。これは幅がゼロの一致、つまり空の文字列ですが、非常に特定の場所、つまりWordの境界にある文字列にのみ一致します。

つまり、\bは次の場所にあります。

  • 連続する\w\W(どちらかの順序)の間:
    • つまり、Word文字と非Word文字の間
  • ^\w の間
    • つまり、\wで始まる場合は文字列の先頭
  • \w$ の間
    • つまり、\wで終わる場合は文字列の末尾

参照資料


正規表現を使用して電子メールアドレスを照合する場合

これは仕様によっては簡単ではありません。

関連する質問

156

別の方法として、キャプチャしない括弧に正規表現を配置します。次に、?修飾子を使用してその式をオプションにします。これは、キャプチャされていないグループの0(空の文字列)または1インスタンスを検索します。

例えば:

/(?: some regexp )?/

あなたの場合、正規表現は次のようになります。

/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/

|「または」演算子は不要です!

ここ はJavaScriptの正規表現構文に関するMozillaのドキュメントです。

9
Jgonzalez731

オプションのメールアドレスを検証する理由がわかりませんが、使用することをお勧めします

^$|^[^@\s]+@[^@\s]+$

意味

^$        empty string
|         or
^         beginning of string
[^@\s]+   any character but @ or whitespace
@         
[^@\s]+
$         end of string

とにかく偽のメールを停止することはありません。この方法で有効なアドレスを停止することはありません。

3
Zano

\ bはWordの境界に一致します。空の文字列に^ $を使用できると思います。

0
pritaeas