正規表現の空の文字列またはメール


127

SOで多くの正規表現の電子メール検証を見つけましたが、空の文字列を受け入れるものは見つかりませんでした。これは正規表現を通じてのみ可能ですか?空の文字列またはメールのみのどちらを受け入れますか?これを正規表現でのみ使用したいと考えています。

回答:


311

この正規表現パターンは空の文字列と一致します。

^$

そして、これは(大まかに)メールまたは空の文字列に一致します。

(^$|^.*@.*\..*$)

1
^(|。* @。* \ .. *)$を実行すると、空白またはこれと同じ効果が得られますが、^と$を1回だけ使用して少し整頓します。
Runevault、2012

1
これはかなり古いですが、私はこれを偶然見つけ、答えに問題がありました。文字列の先頭が非表示になっているが、それでもと一致する^場合があります。実際には、文字列の途中で電子メールを検索するか、何も検索しません。これ(email_regex)?はより適しています。
jclancy 2013年

RegExを使用してそれを行う前に、電子メールの検証が非常に複雑であることを確認してください。stackoverflow.com/questions/201323/...
ブライアン・ケネディ

これは、次のメールtest.test@testと一致します。これは^ $ | ^ [^ \ s @] + @ [^ \ s @] + \。[^ \ s @] + $だと
思います。test@ test.seの

特定のJavaアプリケーションでは、^$は機能しませんが、^(?!.)機能します:[ ^文字列の先頭、(?!)否定先読み、.任意の文字-改行を含まない]
LightCC

8

空の文字列またはメールに一致

(^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

空の文字列または電子メールに一致するが、任意の量の空白にも一致する

(^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

正規表現自体に一致するメールの詳細をご覧ください。

http://www.regular-expressions.info/email.html


2

上記の答えは機能しますが(空の場合は$)、これを試したところ、次のように空のままにしておくこともできます。

/\A(INTENSE_EMAIL_REGEX|)\z/i

同じことが逆の順序で

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

メールを正規表現と一致させないでください。これは非常に醜くて長くて複雑であり、正規表現パーサーはおそらくそれを処理できません。それらを照合するためのライブラリルーチンを見つけてください。実用的な問題だけを解決したい場合メールアドレスの照合という問題(つまり、(通常は)機能する間違ったコードが必要な場合)、他の誰かが送信したregular-expressions.infoリンクを使用します。

空の文字列について^$は、複数の人が言及し、正常に動作します。


13
醜い正規表現は、実際には正規表現パーサーで処理できます。醜いからといって正規表現を使わないのはばかげています。
Peter

これは建設的ではありません。RegExが試され、テストされています(そして醜いどころではありません-どのように機能するかは非常にエレガントだと思いますか?)。可能な解決策についてのガイダンスなしにライブラリを漠然と提案することは、応答する目的をまったく無効にします。誰もがブックマークに必要:code.tutsplus.com/tutorials/...
pimbrouwers

正規表現は読み取り、保守、デバッグが難しいことで悪名高く、ライブラリへの呼び出しによる置換の第一候補となっています。
2015年

2
参考までに:OPが使用している言語がわかっている場合は、特定のライブラリをお勧めします。これは言語にとらわれない質問なので、私の選択肢はかなり限られています。
Kevin

2
正規表現はきれいではありません。そのロジックにより、誰も正規表現を使用するべきではありません。ライブラリがライブラリに置き換わることに非常に固執している場合、ライブラリは何をするつもりだと思いますか?非常に長くて複雑なコードになるか、正規表現を使用することになります...その時点で、独自の「ライブラリ」を実装することもできます。そして今日、誰かが正規表現の使い方を知らない場合でも、おそらく電子メールアドレスの検証を任せるべきではありません...
Andrew


0

/^\s+$|^$/gi空と空のスペースを一致させることを好みます。

console.log("  ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));


3
^ \ s * $を使用する場合、大文字小文字の区別は必要ありません。また、gやi修飾子は必要ありません。これは行全体に一致し、大文字と小文字を区別しないためです。
Cadoo 2014

0

Rails内で使用している場合-アクティブレコードの検証を設定できます allow_blank: true

なので:

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