filter_var($someEmail, FILTER_VALIDATE_EMAIL);
据我所知,验证电子邮件的唯一好方法是发送一封电子邮件,并查看用户是否使用此电子邮件中的链接返回到网站。这就是许多网站所做的。
正如您通过链接到著名的巨型正则表达式所指出的那样,验证所有形式的电子邮件地址都很难,几乎是不可能的。即使对于微不足道的样式电子邮件(我发现太多网站拒绝将大写字母用于电子邮件地址!而且大多数旧的正则表达式拒绝超过4个字母的顶级域名!),也很容易做错。
据我所知,“Jean-Luc B. O'Grady"@example.com和e=m.c^2@[82.128.45.117]都是有效的地址...而I-Made-It-Up@Absurd-Domain-Name.info可能是无效的。
因此,我只需检查我们是否有某些东西,一个独特的@,其他内容,并继续使用它:它会捕捉大多数用户错误(例如空字段或用户名而不是电子邮件地址)
如果用户想提供虚假地址,它只会给出看起来正确的随机内容(see@on.tv或bill.gates@microsoft.com)。没有验证器会捕捉拼写错误(jhon.b@example.com而不是john.b@example.com)。
如果真的想针对完整的RFC验证电子邮件,我建议使用正则表达式围绕@分割,然后分别检查本地名称和域名。从其他情况分离以“开始的本地名称。等。从其他情况分离以[开头的域名。将问题分解为更小的特定域,并仅在定义良好、更简单的情况下使用正则表达式。
当然,这个建议可以应用于许多正则表达式用途...
Cal Henderson(来自Flickr)编写了一个符合RFC822标准的电子邮件地址匹配器,并解释了RFC以及使用RFC匹配电子邮件地址的代码。我已经使用它有一段时间了,没有任何投诉。
RFC822(1982年发布)定义了互联网文本消息(电子邮件)地址的格式,您可以通过谷歌搜索找到RFC - 在线上有许多副本。它们有点简略和奇怪的格式,但是通过一些努力,我们可以明白它们的意图。
... 更新 ...
Zend_Validate 包含一个电子邮件验证器。
有很多正则表达式可以用来验证 - 从非常基本的到非常高级的都有。 你真的应该选择与你的应用程序中有效电子邮件的重要性相匹配的东西。