Ruby:用正则表达式删除“双点”

时间:2013-06-09 23:11:49

标签: ruby regex validation email

我正在使用以下正则表达式来验证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

1 个答案:

答案 0 :(得分:1)

我建议

/\A[^@\s]+@([-a-zA-Z0-9]{1,63}\.)+[a-zA-Z0-9]{2,63}\z/

请注意,此正则表达式不允许所有合法的电子邮件地址。您需要insanely complicated来允许所有已删除注释的RFC 822有效电子邮件地址。如果你想要包含评论,那么它超出了正则表达式的强大功能,你必须转到lexical parser

即使这样,您也无法确定该电子邮件是否真的有效。最好的检查是尝试发送给它,看看接收系统是否接受它。当然,即便如此,它也可能会被默默地丢弃....