如何为无效的电子邮件地址编写基本检查[重复]

Posted

技术标签:

【中文标题】如何为无效的电子邮件地址编写基本检查[重复]【英文标题】:How to write a basic check for an invalid email address [duplicate] 【发布时间】:2012-11-27 10:19:44 【问题描述】:

可能重复:How to validate an email address in php

下面我有一段代码用于检查有效的电子邮件地址:

if ( (strlen($getemail) >= 7) && (strstr($getemail, "@")) && (strstr($getemail, ".")) )

但我的问题是,与上面的代码相反的是什么,以便我可以检查输入的电子邮件是否不包含上述所有功能?

【问题讨论】:

这会不会像..重复? 无论如何,!allOfFeaturesallOfFeatures 的“对立面”;布尔逻辑否定可以通过德摩根的&&(和||)运算符应用,这里有两个我写的一般答案:***.com/questions/12169639/…,***.com/questions/6115801/…(它们有足够的细节来说明“这种倒置的逻辑”) 【参考方案1】:
if (!( (strlen($getemail) >= 7) && (strstr($getemail, "@")) && (strstr($getemail, ".")) ))

【讨论】:

【参考方案2】:

PHP 已经有一个函数可以为您执行此操作。它被称为filter_var,您正在寻找的是validation filter 对应的FILTER_VALIDATE_EMAIL

示例:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) 
    // It's a valid email address
 else 
    // It's not a valid email address

【讨论】:

【参考方案3】:

在我看来,你想要做的事情可以通过 RegEx 来实现。

var_dump(preg_match('#^(\w+)7,@(\w+)\.([a-z])2,4$#i', 'example@example.com')); # 1 (true)
var_dump(preg_match('#^(\w+)7,@(\w+)\.([a-z])2,4$#i', 'foo@example.com')); # 0 (false)

如果不满足其中一个条件(确保地址是字母数字,最少 7 个字符,后跟 @ 等),则整个表达式将导致错误值。

例子:

if(preg_match('#^(\w+)7,@(\w+)\.([a-z])2,4$#i', $email))

// do stuff

不要这样验证电子邮件,使用内置的filter_var 函数。没有真正的方法来验证电子邮件是否“真实”,主要问题是域、TLD。

【讨论】:

以上是关于如何为无效的电子邮件地址编写基本检查[重复]的主要内容,如果未能解决你的问题,请参考以下文章

EmailAddressAttribute 错误地将法国电子邮件地址分类为无效

如何为 Firebase (Kotlin) 创建自定义身份验证

如何为登录屏幕页面编写 Jest 测试

使用 jquery 验证电子邮件地址 [重复]

如何为转发域编写正确的 SPF TXT 记录

检查电子邮件地址是不是存在[重复]