电子邮件地址是否有效,通过验证但反弹?

时间:2011-03-24 12:18:10

标签: php zend-framework email-validation rfc2822

我使用Zend_Validate_EmailAddress验证电子邮件程序的电子邮件地址。它根据RFC2822验证 - http://framework.zend.com/manual/en/zend.validate.set.html

我的问题是这些有效的电子邮件是否通过验证?

test@test.co。 test@test.co.za。等注意最后的句号。

我发现验证者传递了这些明显错误的电子邮件地址。我不完全理解为什么有人可以帮助我?

此致

2 个答案:

答案 0 :(得分:4)

电子邮件地址并非“明显错误”;允许DNS名称以尾随.结尾,表示它是绝对的而不是相对的。

[编辑补充:上述内容可能会产生误导。在电子邮件地址中,至少对于SMTP,主机名始终被解释为完全限定 - 即“绝对”。因此,对于电子邮件地址的主机名部分中的尾随.,永远不会有需要。但是,尾随.仍然是有效的主机名语法。]

答案 1 :(得分:0)

以下是rfc2822推荐的正则表达式:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

这个正则表达式非常耗时,因此我认为Zend使用了一个更简单的正则表达式,无意中忽略了尾随的续集。

有用的链接:
http://www.regular-expressions.info/email.html
http://regexpal.com/