Is there a php library for email address validation?
我需要验证我的用户的电子邮件地址。不幸的是,制作一个符合标准的验证器是很困难的。
下面是一个regex表达式的示例,该表达式试图符合标准
是否有任何验证电子邮件地址的PHP库(最好是开源的)?
你看过PHP的过滤函数吗?他们不完美,但以我的经验,他们做得相当不错。
示例用法(返回布尔值):
afaik,验证电子邮件的唯一好方法是发送电子邮件,并查看用户是否使用此电子邮件中的链接返回该站点。很多网站都是这样做的。
正如你所指出的,通过链接到著名的猛犸象regex,验证所有形式的电子邮件地址都是困难的,几乎是不可能的。即使是对于琐碎的风格的电子邮件,也很容易出错(我发现太多的网站拒绝使用电子邮件地址中的上限!大多数旧的正则表达式拒绝超过4个字母的TLD!).
afaik,"jean-luc b.o'grady"@example.c o m和e=m.c^2@[82.128.45.117]都是有效地址…而i-made-it-up@荒谬-domain-name.info可能无效。
所以,不知何故,我会检查一下我们是否有一些东西,一个唯一的@和其他东西,然后继续:它会捕获大多数用户错误(如空字段或用户名而不是电子邮件地址)。如果用户想给出一个假地址,它只会随机给出看起来正确的地址(请参见@on.tv或[email protected])。并且没有验证器会发现输入错误([email protected]而不是[email protected])。
如果有人真的想根据完整的RFC验证电子邮件,我建议使用regex来拆分@,然后分别检查本地名称和域名。以"与其他情况等开头的本地名称的独立事例。以[与其他情况等开头的域名的独立事例。在较小的特定域中拆分问题,并且仅在定义良好、更简单的情况下使用regex。当然,这个建议可以应用到很多regex的使用中…
[更新]我在这里整理了我所知道的关于电子邮件地址验证的所有信息:http://isemail.info,它现在不仅可以验证电子邮件地址,还可以诊断电子邮件地址的问题。我同意这里的许多评论,即验证只是答案的一部分;请参阅我的文章http://isemail.info/about。
我现在已经整理了Cal Henderson、Dave Child、Phil Haack、Doug Lovell和RFC 3696的测试案例。总共158个测试地址。
我对我能找到的所有验证器运行了所有这些测试。对比如下:http://www.dominicsayers.com/isemail
当人们增强他们的验证器时,我将尝试使此页面保持最新。感谢Cal、Dave和Phil在编译这些测试时的帮助和合作以及对我自己的验证器的建设性批评。
人们应该特别注意RFC3696的勘误表。其中三个规范示例实际上是无效地址。地址的最大长度是254或256个字符,而不是320个字符。
Cal Henderson(Flickr的)写了一个符合RFC822的电子邮件地址匹配器,解释了RFC和使用RFC匹配电子邮件地址的代码。我已经用了一段时间了,没有抱怨。
RFC822 (published in 1982) defines,
amongst other things, the format for
internet text message (email)
addresses. You can find the RFC's by
googling - there's many many copies of
them online. They're a little terse
and weirdly formatted, but with a
little effort we can seewhat they're
getting at.
…更新。。。
正如Porges在评论中指出的那样,链接上的库已经过时了,但是该页面有一个指向更新版本的链接。
我在google代码中找到了一个库:http://code.google.com/p/php-email-address-validation/
还有其他的吗?
Zend_验证包括电子邮件验证程序。
周围有很多用于验证的正则表达式——从非常基本到非常高级。您真的应该选择与应用程序中有效电子邮件的重要性相匹配的邮件。
我建议查看zend_validate_emailaddress[来源]的源代码。
一旦您的依赖关系得到修复,您可以简单地执行以下操作:
1 2 | $mail_validator = new Zend_Validate_EmailAddress(); $mail_validator->isValid($address); // returns true or false |
最好是通过SVN外部将完整的Zend库导入到您的项目中,并将include路径指向它…
但您只需下载必要的文件(1、2、3、4、5、6),并将它们全部包含在内(删除"一次性调用"的要求)。