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

sar*_*012 8 php

可能重复:
如何在php5中验证电子邮件?

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

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

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

yourname@company.co.uk

它被标记为无效.

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

Sha*_*ngh 16

为什么不使用filter_var

var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
Run Code Online (Sandbox Code Playgroud)

编辑

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


pax*_*blo 6

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

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

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


a有无数个完全有效的电子邮件地址,其背后没有实际帐户.