我有一大笔电子邮件列表。很多电子邮件都有打字错误。我正在尝试构建一个字符串来检查有效的电子邮件。
这正是我所用的正则表达式。
def is_a_valid_email?(email) (email =~ /^(([A-Za-z0-9]*\.+*_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\+)|([A-Za-z0-9]+\+))*[A-Za-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
因为这不符合你的点要求,它可以简单地被修改为:
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