使用正则表达式的Ruby电子邮件验证

前端之家收集整理的这篇文章主要介绍了使用正则表达式的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

猜你在找的正则表达式相关文章