是否有用于电子邮件地址验证的php库?
我需要验证我的用户的电子邮件地址。不幸的是,制作验证器很难 是试图符合标准的正则表达式的示例是否有用于电子邮件地址验证的php库?,php,email,open-source,email-validation,Php,Email,Open Source,Email Validation,我需要验证我的用户的电子邮件地址。不幸的是,制作验证器很难 是试图符合标准的正则表达式的示例 是否有验证电子邮件地址的PHP库(最好是开源的) 我在谷歌代码中找到了一个库: 还有其他的吗?你看过吗?它们并不完美,但根据我的经验,它们做得相当不错 示例用法(返回布尔值): filter\u var($someEmail,filter\u VALIDATE\u EMAIL)好的,验证电子邮件的唯一好方法是发送电子邮件,并查看用户是否使用此电子邮件中的链接返回站点。很多网站都是这样做的 正如您在著名的
是否有验证电子邮件地址的PHP库(最好是开源的) 我在谷歌代码中找到了一个库: 还有其他的吗?你看过吗?它们并不完美,但根据我的经验,它们做得相当不错 示例用法(返回布尔值):
filter\u var($someEmail,filter\u VALIDATE\u EMAIL)代码>好的,验证电子邮件的唯一好方法是发送电子邮件,并查看用户是否使用此电子邮件中的链接返回站点。很多网站都是这样做的
正如您在著名的mammoth regex链接中指出的,验证所有形式的电子邮件地址都很困难,几乎不可能。即使是普通风格的电子邮件,也很容易出错(我发现太多网站拒绝电子邮件地址中的大写字母!大多数旧正则表达式拒绝超过4个字母的TLD!)
AFAIK,“Jean-Luc B.O'Grady”@example.com和e=m.c^2@[82.128.45.117]都是有效地址。。。我自己做的-Up@Absurd-Domain-Name.info可能无效
因此,不知何故,我只需检查我们是否有一些东西,一个唯一的@,一些其他的东西,然后继续:它将捕获大多数用户错误(如空字段或用户名而不是电子邮件地址)。
若用户想要提供一个假地址,它只会提供一些看起来正确的随机地址(see@on.tv或者比尔。gates@microsoft.com). 而且没有验证器会发现打字错误(jhon)。b@example.com而不是约翰。b@example.com)
如果有人真的想根据完整的RFC验证电子邮件,我建议使用正则表达式来拆分@,然后分别检查本地名和域名。将以“开头的本地名称的大小写与其他情况等分开。将以[开头的域名的大小写与其他情况等分开。在较小的特定域中存在拆分问题,并且仅在定义良好的简单情况下使用正则表达式。
这个建议可以应用于很多正则表达式的使用,当然…包括一个电子邮件验证程序
有很多用于验证的正则表达式,从非常基本到非常高级。
您真的应该选择与应用程序中有效电子邮件的重要性相匹配的内容。我建议您查看Zend_Validate_EmailAddress[]的源代码
修复依赖项后,您只需执行以下操作:
$mail_validator = new Zend_Validate_EmailAddress();
$mail_validator->isValid($address); // returns true or false
最好是通过svn external将完整的Zend库放入您的项目中,并指向它的include路径
但是你只需下载必要的文件(,,,,),并将它们全部包括在内(删除require_once调用)(Flickr的)写了一篇文章,解释了RFC和利用RFC匹配电子邮件地址的代码。我已经使用它很长时间了,没有任何抱怨
RFC822(1982年出版)定义:,
除其他事项外,还包括
互联网短信(电子邮件)
地址。您可以通过以下方式找到RFC
谷歌搜索-有很多的副本
他们在网上。他们有点简洁
格式怪异,但有一个
不费吹灰之力我们就能看到它们是什么
接近
…更新
正如评论中指出的,链接上的库已过时,但该页面有指向的链接。[更新]我已经在这里整理了我所知道的关于电子邮件地址验证的所有信息:,它现在不仅可以验证电子邮件地址,还可以诊断电子邮件地址的问题。我同意这里的许多评论,即验证只是答案的一部分;请参阅我的文章
我现在已经整理了来自CalHenderson、DaveChild、PhilHaack、DougLovell和RFC3696的测试用例。总共158个测试地址
我对我能找到的所有验证器运行了所有这些测试。比较如下:
我将努力使这一页保持最新,因为人们增强了他们的验证器。感谢Cal、Dave和Phil在编译这些测试方面的帮助和合作以及对这些测试的建设性批评
人们应该特别注意这一点。三个典型的例子实际上是无效地址。地址的最大长度是254或256个字符,而不是320。我在几个项目中使用了它的前身,到目前为止还没有任何问题。我说去吧。这是一个有效的答案,我通常会这么做。但对于这个特定的客户,我需要一种方法来检查电子邮件是否有效。电子邮件验证的替代方法是要求用户输入两次电子邮件,我强烈反对这种做法。希望我能说服他们不要这样做。重复输入有什么错?这是一种快速、廉价且简单的方法,可以确保用户没有胖手指键入电子邮件地址时,他们的电子邮件地址。如果您确实需要验证电子邮件地址的格式是否有效,Dominic的回答(以及链接的站点)似乎包含了我见过的最全面的信息。@afrazier:“复式输入有什么错?“嗯,如果人们喜欢我,他们只需将第一个条目复制/粘贴到第二个条目中,因此好处是无效的……我们是在谈论电子邮件还是电子邮件地址?我指的是电子邮件地址。我已更正了我的问题以反映这一点。谢谢我正在编写一个简单的(非企业)代码。”需要基本验证器的应用程序。虽然FILTER\u VALIDATE\u EMAIL似乎没有完全实现该规范——例如,它在某些测试中失败——但它似乎“足够好”为了满足我当前的需要。谢谢!谢谢你这么做;有真实的数据来处理,而不仅仅是猜测,这真是太棒了。你还可以包括本页提到的其他库吗?值得注意的是,正如引用所指出的,RFC822是古老的。事实上,淘汰822(2822)的RFC也是过时的,这表明它是多么过时:)当前电子邮件地址的RFC是5322,在这个答案的月份发布!