使用 preg_match 函数无效的电子邮件地址
在上面的内容中,使用preg_match函数来判断是否为有效的邮箱地址。然而,这个正则表达式有一些问题,导致了一些无效的邮箱地址被判断为有效。问题出现的原因是正则表达式在@符号之后,要求紧跟着一个点,并且这个点后面的字符长度只能是2到6个字符。这就导致了一些邮箱地址,如"example@somename.somewhere.com"被判断为无效,而"example@somename-somewhere.com"被判断为有效。如果只希望允许一些"合理"的邮箱地址通过验证,那么这个正则表达式可以工作。但是,我不建议仅仅使用一个正则表达式来验证邮箱地址,除非只想允许一些"合理"的地址通过。关于如何"正确"验证邮箱地址,有一篇不错的文章可以参考:http://www.linuxjournal.com/article/9585。
这段对话中提到了一个关于使用preg_match函数检测无效电子邮件地址的问题。从对话中可以整理出问题的出现原因和解决方法。
问题的出现原因:
- 在正则表达式中使用了空格,而实际上电子邮件地址中不允许包含空格。
- 即使电子邮件地址中允许包含空格,也不应该要求空格在特定位置相对于分隔符(如@字符)。
解决方法:
- 普遍认为,使用正则表达式来验证电子邮件地址并不是一个好的做法,最好的方法是发送带有确认链接的电子邮件。
- 如果一定要使用正则表达式验证电子邮件地址,那么至少要使用正确的正则表达式。
- 作者表示从谷歌搜索中复制了这段代码,并且认为它可能存在缺陷,因此打算仔细检查代码。
文章内容如下:
现在,我可以问你一个问题吗?你的正则表达式中的那些空格是做什么的?:-)
我非常确定,在电子邮件地址中是不允许包含空格的。而且,即使允许,也不应该要求空格在特定位置相对于分隔符(比如@字符)。
虽然我一般不赞成使用正则表达式来验证电子邮件地址(只需发送带有确认链接的电子邮件 - 这样解决了你的问题,还有更多的好处a),但如果你一定要这样做,至少要使用正确的正则表达式。
a存在大量有效的电子邮件地址,但实际上并没有对应的账户。
同意,正确的电子邮件正则表达式相当复杂...
我从谷歌搜索中复制了这段代码,我没有自己编写它。我只能假设它存在缺陷。我会仔细检查一下。
文章标题:无效的电子邮件地址使用preg_match函数的原因及解决方法
在开发过程中,我们经常会遇到验证电子邮件地址的需求。PHP提供了filter_var函数来验证电子邮件地址的有效性。下面是使用filter_var函数的示例代码:
var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
如果电子邮件地址无效,该代码会返回false。我们可以使用if语句来判断返回值,从而继续执行后续的代码操作。
if(filter_var($email,FILTER_VALIDATE_EMAIL) === false) { echo 'Email is not valid'; } else { //继续执行其他操作 }
然而,在上述讨论中,某些情况下了使用filter_var函数验证简单电子邮件地址无效的问题。这可能是因为传递的变量有问题。针对这个问题,有人给出了一个简单的示例代码,以便进行演示和测试。你可以点击链接codepad.org/E3RIsQG6查看这个示例代码。
最后,有人承认自己的代码存在问题,并且表示问题已经解决了。
通过上述讨论,我们可以总结出以下内容:
问题原因:使用preg_match函数验证电子邮件地址的有效性时出现了问题。
解决方法:使用filter_var函数来验证电子邮件地址的有效性,并通过if语句判断返回值来决定后续的操作。如果需要演示和测试,可以参考提供的示例代码。
通过这篇文章,我们了解了验证电子邮件地址的常用方法,并且知道了使用preg_match函数验证电子邮件地址可能会遇到的问题以及解决方法。希望对大家在开发中遇到类似问题时有所帮助。