2

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

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

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

我发现验证器通过了这些明显错误的电子邮件地址。我不完全明白为什么这应该通过任何人都可以帮助我吗?

问候

4

2 回答 2

4

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

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

于 2011-03-24T12:23:24.147 回答
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/

于 2011-03-24T12:30:22.957 回答