109

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

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

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

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

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

4 に答える 4

248

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

^$|pattern

説明

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

参考文献


の上\b

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

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

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

参考文献


正規表現を使用して電子メール アドレスを照合することについて

これは、仕様によっては自明ではありません。

関連する質問

于 2010-07-26T09:15:03.203 に答える
10

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

例えば:

/(?: some regexp )?/

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

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

|「or」演算子は必要ありません。

JavaScript の正規表現構文に関する Mozilla のドキュメントは次のとおりです

于 2014-04-23T21:34:26.967 に答える
8

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

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

意味

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

いずれにせよ、偽の電子メールを阻止することはできません。この方法では、有効なアドレスを阻止することはできません。

于 2010-07-26T09:32:52.087 に答える
2

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

于 2010-07-26T09:13:13.400 に答える