使用正则表达式验证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-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 # <~~~ 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日
简略版:
感谢@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
由于这不符合你的点要求,因此可以进行以下修改:
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