有一个用于电子邮件地址validation的PHP库吗?

我需要validation我的用户的电子邮件地址。 不幸的是,制作一个符合标准的validation器是很困难的

这是一个试图符合标准的正则expression式的例子

有没有任何PHP库(最好是开源的)validation电子邮件地址?

你看过PHP的filter_函数吗? 他们并不完美,但他们在我的经历中做了相当体面的工作。

用法示例(返回布尔值):

filter_var($someEmail, FILTER_VALIDATE_EMAIL);

AFAIK,validation电子邮件的唯一好方法是发送电子邮件,并查看用户是否使用此电子邮件中的链接返回到站点。 这是很多网站做的。

正如你指出的与众所周知的庞大的正则expression式的链接,validation所有forms的电子邮件地址是困难的,几乎是不可能的。 即使是微不足道的风格的电子邮件(我发现有太多的网站拒绝电子邮件地址的上限!),而且大多数旧的正则expression式拒绝超过4个字母的TLD,这是很容易做错的。

AFAIK,“Jean-Luc B. O'Grady”@ example.com和e = mc ^ 2 @ [82.128.45.117]都是有效地址…而I-Made-It-Up @ Absurd-Domain-Name。信息可能是无效的。

所以不知何故,我只是检查我们有什么东西,一个独特的@,别的东西,并与它一起:它会捕获大多数用户错误(如空字段或用户名,而不是电子邮件地址)。
如果用户想给一个虚假的地址,它只会给随机看起来正确的(see@on.tv或bill.gates@microsoft.com)。 没有validation器会发现错别字(jhon.b@example.com,而不是john.b@example.com)。

如果真的想validation电子邮件完整的RFC,我会build议使用正则expression式分裂@,然后分别检查本地名称和域名。 以“从其他案件开始”等单独的案件。从其他案件等开始的域名单独案件在较小的具体领域拆分问题,并只在一个明确,简单的情况下使用正则expression式。
这个build议可以应用于很多正则expression式的使用,当然…

[已更新]我整理了我所知道的有关电子邮件地址validation的所有信息: http : //isemail.info ,现在它不仅validation了电子邮件地址,还诊断了问题。 我同意这里的许多意见,validation只是答案的一部分; 在http://isemail.info/about上看到我的文章。;

我现在整理了来自Cal Henderson,Dave Child,Phil Haack,Doug Lovell和RFC 3696的testing用例。

我对所有可以find的validation器都运行了所有这些testing。 比较在这里: http : //www.dominicsayers.com/isemail

我会尽量保持这个页面是最新的,因为人们提高validation。 感谢Cal,Dave和Phil在编写这些testing方面提供的帮助和合作,并对我自己的validation器进行了build设性的批评。

人们应该特别注意对RFC 3696的勘误 。 其中三个规范的例子实际上是无效的地址。 而地址的最大长度是254或256个字符, 而不是 320。

Cal Henderson (Flickr的)编写了一个RFC822兼容的电子邮件地址匹配器 ,并解释了使用RFC匹配电子邮件地址的RFC和代码。 我已经用了很长一段时间了,没有任何抱怨。

RFC822(1982年出版)定义了互联网文本消息(电子邮件)地址的格式。 你可以通过谷歌searchfindRFC – 有很多在线的副本。 他们是一个简单而古怪的格式,但我们可以通过一点努力,看看他们正在做些什么。

…更新…

正如Porges在评论中指出的那样,链接上的图书馆已经过时了,但是该网页有一个更新版本的链接。

我在google代码中find了一个库: http : //code.google.com/p/php-email-address-validation/

还有别的吗?

Zend_Validate包含一个电子邮件validation器。

有很多正则expression式用于validation – 从非常基本到非常先进的一切。 你真的应该select一些与应用程序中有效电子邮件重要性相匹配的东西。

我build议看一下Zend_Validate_EmailAddress [ source ]的源代码。

一旦你有你的依赖固定你可以简单地做到以下几点:

 $mail_validator = new Zend_Validate_EmailAddress(); $mail_validator->isValid($address); // returns true or false 

最好的办法是通过svn external将完整的Zend库导入到您的项目中,并指向它的包含path。

但您可以下载必要的文件( 1,2,3,4,5,6 ),并将其全部包含在内(删除require_once调用)