使用正则表达式的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

如果电子邮件以下划线表示,并且只有一个时间段,则通过。我有很多电子邮件在这个名字本身有一段时间。如何在正则表达式中检查。

hello.me_1@email.com # <~~ valid
foo.bar#gmail.co.uk # <~~~valid
f.o.o.b.a.r@gmail.com # <~~~valid 
f...bar@gmail.com # <~~ not valid 
get_at_m.e@gmail  #<~~ valid

有人可以帮我改写正则表达式吗?

TL; DR:
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i

原来的答案

你似乎很复杂的事情,我只会使用:

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i

取自michael hartl’s rails book

因为这不符合你的点要求,它可以简单地被修改为:

VALID_EMAIL_REGEX = /\A([\w+\-]\.?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i

正如CAustin所说,还有许多其他的解决方案。

编辑:

@installero指出,原始的子域中的连字符失败,这个版本会工作(不知道为什么字符类首先缺少数字和连字符)。

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...