電子メールを盲目的に受け入れないように検証するための最も単純な正規表現は何ですか?[閉まっている]


80

ユーザーが私のサイトでアカウントを作成するときに、すべての入力を受け入れないように電子メールのサーバー検証を行いたいと思います。

ハンドシェイク検証を行う方法で、確認を送信します。

私は、最高ではないが、何も検証しない単純すぎないものを探しています。正規表現では検証ができないため、正規表現では正しい検証が行われないため、制限がどこにあるべきかわかりません。

正規表現に固有の悪行税と視覚的な複雑さを制限しようとしています。この場合、いずれも正しいからです。

それを行うためにどの正規表現を使用できますか?


、「最も簡単な」はまさに「最高」のように主観的だと思ったparibusをceteris、そのスレッドは、正規表現の宝庫を持っていましたが、あなたはそう...と思われる場合すくめ
ミハイLimbăşan

正規表現の検証を行う場合、なぜ式を単純なものに制限するのですか?良いものを使用しましょう。これはコードに影響を与えず、より良い結果を提供します。
twk 2009

この検証はアプリケーションのどこにありますか?POSTで?入力をサニタイズするために何をしていますか?
Braiam

^(?i)[A-Z0-9 + _.-] + @(?:。*)。(?:。*)$、^は開始、$は終了、(?i)大文字と小文字を区別しない一致。@の前では、英数字、「+」、「_」、「-」のみを許可します。これ、?:部分一致サブグループ形成なし、完全一致1つのみ
P SatishPatro19年

回答:


99
^\S+@\S+$

3
これは無効なアドレスと一致します。どの正規表現でも可能ですが、これはtest @ stackoverflow..comなどの一般的なスペルミスと一致します(二重のドットに注意してください)。より良い例を提供してください。
ミハイLimbăşan

62
それは非常に単純で非常に粗いフィルターであると思われます、そしてなぜ2倍の期間がそれらをカバーするために同様の複雑さのコストを持つ他のすべての失敗よりも特権があるのか​​分かりません。
カオス

2
+1。これはとにかく主観的な質問であり、これは簡単です。
ジェイソンコーエン

2
ええ、完全な検証正規表現を使用したくない場合は、これは簡単な概算です
暴れ

8
+1正規表現を介して電子メールアドレスを完全に「検証」しようとするのはばか者の用事です。これは、最も単純なタイプミスをキャッチするために機能します。残りはメールを送ろうとすることで見つけることができます。上記では、Unicode(-> Punycode)ドメインも許可されていますが、ほとんどの「巧妙な」正規表現では失敗します。
bobince 2009

239

標準に準拠した電子メールアドレスのみを受け入れる正規表現を作成することができます。ただし、標準に厳密に準拠していないものの、機能する電子メールアドレスがいくつかあります。

基本的な検証のためのいくつかの簡単な正規表現を次に示します。

@文字が含まれています:

@

@とその後ろのどこかにピリオドが含まれています:

@.*?\.

@の前、ピリオドの前、およびその後に少なくとも1文字あります。

.+@.+\..+

@は1つだけで、@の前、ピリオドの前、およびその後に少なくとも1文字あります。

^[^@]+@[^@]+\.[^@]+$

ユーザーAmoebaMan17は、空白を削除するためにこの変更を提案しています。

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

そして、1つの期間のみを受け入れる場合:

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

7
RFC 6531でパイプを下って来るものを見て、RFC 3696をよく見ると、電子メールを検証する唯一の方法は確認電子メールを送信することであるという結論に達するでしょう。電子メールアドレスで正規表現を使用する際の真の焦点は、ユーザーがタイプミスを防ぐのを助けることであるはずだと思います。そこで、このような単純な正規表現が役立ちます。
ボブ・バーカー

パーフェクト、@ AmoebaMan17。RegExは、電子メールアドレスの形式を検証できますが、電子メールアドレスの内容を検証することはできません。そうは言っても、あなたはフォーマットを完全に検証します。メールを送信することが、コンテンツを検証する唯一の方法です。
クレイグ

動作しtest@test.comませんか?
Abdul Hameed 2018

1
文字列がピリオドで終わるのを防ぐために、次の変更を行いました:^ [^ @ \ s] + @ [^ @ \ s] + \。[^ @ \。\ s] + $
fyrite 2018

1
ええ、最後のものを使用しないでください。多くの有効なオプションとは一致しません。たとえば、me @ provider.co.uk。
s.meijer

7

^ [a-zA-Z0-9 _。+-] + @ [a-zA-Z0-9-] +。[a-zA-Z0-9-。] + $

  • 1のみ @
  • いくつかのドメインとサブドメイン

3

AmoebaMan17による式のこの小さな調整により、アドレスがドットで開始/終了するのを停止し、複数のドットを並べて停止する必要があると思います。一般的な問題を排除しながら、再び複雑にならないようにします。

(?!.*\.\.)(^[^\.][^@\s]+@[^@\s]+\.[^@\s\.]+$)

動作しているようです(ただし、私はRegEx-pertではありません)。ピリオドで終わる文の終わりからユーザーがメールアドレスをコピーして貼り付ける問題を修正します。

すなわち:これが私の新しいメールアドレスtabby@coolforcats.comです。


これは、@の前の単一の文字では機能しません
Andy Hoyle 2018年

<script> alert( 'hello')</ script> @ hello.comは、この正規表現に従って有効です。大丈夫ではないようです。
dudedev 2018年

1

好きなものを選んでください。

これがRFC2822セクション3.4.1に準拠しているものです...

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

気になる場合に備えて。:)


7
これを今見ている人へのメモ:RFC 2822に準拠していません。– 2011
ポージ

11
そして、それも簡単ではありません:)
Dan Diplo 2012年

2
また、有効な電子メールアドレスのホストをブロックします。特に国際的な文字/言語を使用しているもの。
ボブ・バーカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.