我使用以下代码确保注册时提供的电子邮件地址有效。
(!preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $email))
我输入了标准的电子邮件地址,例如
yourname@company.co.uk
并且它被标记为无效。
任何人都可以帮我解释为什么会这样吗?
答案 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的解决方案似乎更好