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


84

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

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

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

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

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

5
メールを検証する必要がある場合は、できるだけ寛容にしてください。自家製の正規表現を使用すると、実際の有効で機能的な電子メールアドレスを簡単に見逃してしまうことに驚かれることでしょう。たとえば、正規表現は次の有効なアドレスで失敗します:joe_blow @ foo.com、micro $ oft @ apple.com、root @ localhost、siegfried + roy @ lasvegas.com。
zano 2010

Zanoに同意して、この正規表現を見てくださいex-parrot.com/pdw/Mail-RFC822-Address.html
Anders

@Andersうわー、それは非常に複雑な正規表現です!正規表現の複雑さを誤解していると思います
Curt 2010

4
いいえ、メール検証の複雑さを誤解していると思います:-)
Zano 2010

回答:


199

一致するpatternか空の文字列を使用するには、

^$|pattern

説明

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

参考文献


オン \b

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

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

  • 連続\w\W(いずれかの順序)の間:
    • つまり、単語文字と非単語文字の間
  • ^\w
    • つまり、文字列で始まる場合は文字列の先頭 \w
  • \w$
    • つまり、文字列で終わる場合は文字列の最後に \w

参考文献


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

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

関連する質問


10

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

例えば:

/(?: some regexp )?/

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

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

|「または」演算子は必要ありません!

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


8

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

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

意味

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

とにかく偽の電子メールを停止することはありません。このようにして、有効なアドレスを停止することはありません。


フィールドにアドレスが入力されていない場合、データベースにNULL値が入力されるため、ニュースレターの送信などで対処できます。これで偽のアドレスが停止しないことを感謝します。正規表現でそれはまったく可能だと思いますが、少なくともヒューマンエラーを最小限に抑えることができます
Curt

1
また、お客様からも頻繁にご要望をいただいております。これは、顧客が電子メールフィールドに電話番号を入力するなどの愚かなことをしないようにするためだけのものです。
ケリーゲンドロン2012年

空の文字列をチェックしたかっただけです。^ $が働いていた
Subhashi

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.