Techioz Blog

Ruby 正規表現を使用した電子メール検証

概要

私は大量のメールのリストを確認しています。多くのメールにタイプミスがあります。有効なメールをチェックする文字列を構築しようとしています。

これは私が正規表現として持っているものです。

def is_a_valid_email?(email)
  (email =~ /^(([A-Za-z0-9]*\.+*_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\+)|([A-Za-z0-9]+\+))*[A-Z‌​a-z0-9]+@{1}((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,4}$/i)
end

電子メールにアンダースコアとピリオドが 1 つだけ含まれている場合は合格します。名前自体に複数のピリオドが含まれるメールがたくさんあります。正規表現でそれを確認するにはどうすればよいですか。

[email protected] # <~~ valid
foo.bar#gmail.co.uk # <~~~ not valid
[email protected] # <~~~valid 
[email protected] # <~~ not valid 
get_at_m.e@gmail  #<~~ valid

誰かが正規表現を書き直すのを手伝ってくれますか?

解決策

これは、少なくとも 2.2.1 以降、標準ライブラリに組み込まれています。

URI::MailTo::EMAIL_REGEXP

*警告 上記では、a@b が有効な電子メール アドレスであると見なされます。