我正在使用以下正则表达式来验证Rails应用程序的电子邮件数据库中的电子邮件:
/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
它有点起作用,但它给我留下了有这种错误的无效邮件:
name@domain..com
我如何编写这个正则表达式以避免这个或者是最好的正则表达式来清理电子邮件列表我必须只保留有效的电子邮件地址?我正在使用像这样的方法来清理列表:
def mailSweep
mails = Email.all.lazy
for address in mails do
if address.email.to_s =~ /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
puts address.email.to_s + " " + "it's valid"
else
puts address.email.to_s + " " + "it's invalid, destroying..."
address.destroy
end
end
end
答案 0 :(得分:1)
我建议
/\A[^@\s]+@([-a-zA-Z0-9]{1,63}\.)+[a-zA-Z0-9]{2,63}\z/
请注意,此正则表达式不允许所有合法的电子邮件地址。您需要insanely complicated来允许所有已删除注释的RFC 822有效电子邮件地址。如果你想要包含评论,那么它超出了正则表达式的强大功能,你必须转到lexical parser。
即使这样,您也无法确定该电子邮件是否真的有效。最好的检查是尝试发送给它,看看接收系统是否接受它。当然,即便如此,它也可能会被默默地丢弃....