RFC5322で定義されているメールアドレスの書式を完全にサポートすることは簡単ではありませんが、適当な正規表現を紹介してOKとする記事があとを絶ちません。
HTML5には input[type=email] という要素があり、メールアドレスの書式チェックをクライアントサイドで行えるようになっています。このチェックでは、下記の(Perl5の記法にならった)正規表現を使っています。
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
注釈に
この要件は電子メールの構文を定義するRFC5322に対して 意図的に違反 (willful violation) している。
とあるように、仕様を完全に満足する正規表現ではありませんので、電子メールヘッダを解析するような本格的な用途に対しては不十分ですが、WEBサービスに対するユーザー入力を検証する程度であれば、この正規表現を採用しておくのが無難ではないでしょうか。
そして、せめて +
をlocal-partに含むメールアドレスを拒否するサービスがこの世から絶滅しますように。
404 Blog Not Found の管理人が嫌いなタイプの正規表現w
このレベルの正規表現でチェックするなら使わないか
でチェックするのと同意かと
複雑見えて実は全然あってないというレベルなので
また
nos@[202.26.186.51]
というメールアドレスも有りなのだがそれをはじいてるというw
CRF5322#page-18
脊髄反射乙です:)
Wikipediaに忠実に従い、@より前の部分のみ判定する正規表現書いてみました。
誤りがあれば教えてください。
ちなみに私は
というポリシーのもと書いてるので、違和感を覚える人もいるかもしれませんが、私はこちらの方が自然だと考えます。
前者に関しては、JavaやCなどの厳格な言語では逆にこうしないとその文字が認識されなかったり、 コンパイルエラー になります。
後者に関しては、無駄なバックトラックを行わないことで 実行速度の向上 が期待できます。
誰か@より後ろの部分も判定するやつ作ってください(丸投げ)
@mpyw うちのコメント熟読よろし
http://qiita.com/mpyw/items/257eabe0b43b1e02e6f7
HTML5 の "willful violation" というのは、「元々の仕様がカスだから現実的な仕様を HTML5 で再定義する」っていう意味なので、本格的な用途でこそこれを使っておいた方がへたに自分で考えるよりも無難ですよ