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

11 浏览
0 Comments

使用正则表达式验证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 # <~~~ not valid
f.o.o.b.a.r@gmail.com # <~~~valid 
f...bar@gmail.com # <~~ not valid 
get_at_m.e@gmail  #<~~ valid

有人能帮助我重写我的正则表达式吗?

admin 更改状态以发布 2023年5月20日
0
0 Comments

简略版:

感谢@joshuahunter(下方有他的回答,请点赞)。在此列出以便人们看到。

URI::MailTo::EMAIL_REGEXP

旧简略版:

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

这是从迈克尔·哈特尔的Rails书中摘取的

由于这不符合你的点要求,因此可以进行以下修改:

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

0
0 Comments

自2.2.1版本以来,这已经被集成到标准库中了。

URI::MailTo::EMAIL_REGEXP

0