使用preg_match的电子邮件地址无效

时间:2011-06-23 11:46:47

标签: php

  

可能重复:
  How to validate an email in php5?

我使用以下代码确保注册时提供的电子邮件地址有效。

(!preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $email))

我输入了标准的电子邮件地址,例如

  

yourname@company.co.uk

并且它被标记为无效。

任何人都可以帮我解释为什么会这样吗?

4 个答案:

答案 0 :(得分:16)

为什么不使用filter_var

var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));

修改

if(filter_var($email,FILTER_VALIDATE_EMAIL) === false)
{
   echo 'Email is not valid';
}
else
{
   //do the stuff
}

答案 1 :(得分:6)

现在我可以问一个问题吗?这些空格在你的正则表达式中有什么作用? : - )

我非常确定空格在电子邮件地址中实际上并不有效。并且,即使它们是,它们也不需要在相对于分隔符的特定位置(例如在@字符之前和之后)。

虽然我通常不同意使用正则表达式来处理电子邮件地址(只是发送带有确认链接的电子邮件 - 解决了你的问题,然后是一些 a ),你至少应该使用正确的正则表达式,如果你必须这样做。


a 有无数个完全有效的电子邮件地址,后面没有真正的帐户。

答案 2 :(得分:2)

如果您想使用正则表达式匹配电子邮件,以下内容将匹配“合理”地址。

preg_match('/^([a-z0-9]+([_\.\-]{1}[a-z0-9]+)*){1}([@]){1}([a-z0-9]+([_\-]{1}[a-z0-9]+)*)+(([\.]{1}[a-z]{2,6}){0,3}){1}$/i', $email)

这是非常冗长的,但如果你只想要,就像我说“明智的”地址一样 - 它就能完成这项任务。

确实卡在“示例@ somename.somewhere .com”这样的地址上,因为在@符号之后它会查找一段时间之后的任何内容,只有2-6个字符。< / p>

“示例@ somename-somewhere .com”但是会过得很好。

我不建议尝试使用单一的正则表达式解决方案,除非在我的情况下,您只想允许“合理”的地址。

有一篇很好的文章涵盖了“正确”验证电子邮件地址:http://www.linuxjournal.com/article/9585

答案 3 :(得分:-1)

随着计划发布的新无域地址,paxdiablo的解决方案似乎更好