是否有用于电子邮件地址验证的php库?
我需要验证用户的电子邮件地址。不幸的是,很难使验证器符合标准
这是一个试图符合标准的正则表达式的示例
是否有任何PHP库(最好是开源的)可以验证电子邮件地址?
解决方案
我在Google代码中找到了一个库:http://code.google.com/p/php-email-address-validation/
还有其他吗?
我们是否看过PHP的filter_函数?它们并不完美,但以我的经验来看,它们做得相当不错。
用法示例(返回布尔值):
filter_var($ someEmail,FILTER_VALIDATE_EMAIL);
AFAIK,验证电子邮件的唯一好方法是发送电子邮件,并使用此电子邮件中的链接查看用户是否返回该站点。那就是很多网站所做的。
正如我们所指向的著名猛ma正则表达式的链接所指出的那样,验证所有形式的电子邮件地址非常困难,几乎是不可能的。即使对于平凡的电子邮件,这样做也很容易出错(我发现太多的网站拒绝电子邮件地址中的大写字母!而且大多数旧正则表达式都拒绝超过4个字母的TLD!)。
AFAIK," Jean-Luc B. O'Grady" @ example.com和e = mc ^ 2 @ [82.128.45.117]都是有效地址...而I-Made-It-Up @ Absurd-Domain-Name。信息可能无效。
因此,以某种方式,我只是检查我们是否有东西,一个独特的@以及其他东西,然后去处理它:它将捕获大多数用户错误(例如空字段或者用户名而不是电子邮件地址)。
如果用户想提供一个伪造的地址,它只会给一些看起来正确的随机信息(请参阅@ on.tv或者[email protected])。而且没有任何验证者会捕捉到拼写错误([email protected]而不是[email protected])。
如果确实要根据完整的RFC验证电子邮件,我建议使用正则表达式在@周围进行拆分,然后分别检查本地名称和域名。本地名称以"开头,与其他情况分开。
当然,此建议可用于许多正则表达式用途。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Zend_Validate包含一个电子邮件验证器。
周围有很多正则表达式可用于验证从非常基础到非常高级的所有内容。
我们确实应该选择与应用程序中有效电子邮件的重要性相匹配的内容。
我建议查看Zend_Validate_EmailAddress [源代码]的源代码。
修复依赖关系后,只需执行以下操作:
$mail_validator = new Zend_Validate_EmailAddress(); $mail_validator->isValid($address); // returns true or false
最好是通过svn external将完整的Zend Library放入项目中,并指向它的包含路径...
但我们只需下载必要的文件(1、2、3、4、5、6),然后将其全部包含(删除require_once调用)
(Flickr的)Cal Henderson编写了一个符合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在评论中指出的那样,链接上的库已过时,但是该页面上有指向更新版本的链接。
[更新]我已经在这里整理了有关电子邮件地址验证的所有信息: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在汇编这些测试和对我自己的验证程序的建设性批评方面所提供的帮助和合作。
人们应该特别注意针对RFC 3696的勘误表。实际上,其中三个规范示例是无效地址。地址的最大长度为254或者256个字符,而不是320。