0

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

1 回答 1

1

我建议

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

请注意,此正则表达式不允许所有合法的电子邮件地址。您需要一些极其复杂的东西才能允许所有已被删除评论的 RFC 822 有效电子邮件地址。如果您想包含注释,那么它超出了正则表达式的能力,您必须使用词法解析器

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

于 2013-06-09T23:18:44.153 回答