2014-11-06 61 views
0

,当我在PHP 5.3运行此:警告:的preg_match()[function.preg匹配]:没有结束符“^

public function isValidEmail($email) 
{ 
    //$pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; 
return (preg_match($pattern, $email)) ? 1 : 0; 
} 

我得到这个消息:

Warning: preg_match() [function.preg-match]: No ending delimiter '^' in...... 

任何想法它应该是什么?

+2

您的正则表达式没有分隔符$ pattern =“/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9 - ] +(\。[a-z0-9 - ] +)*(\。[az] {2,3})$ /“;' – 2014-11-06 02:47:34

+0

您的'$ pattern'也被注释掉了。 – esqew 2014-11-06 02:47:50

+0

一定要使用preg_quote来反斜杠模式中的任何其他斜线,如下所示:$ pattern ='/'。 preg_quote(“^ [_ A-Z0-9 - ] +(\ [_ A-Z0-9 - ]。+)* @ [A-Z0-9 - ] +(\ [A-Z0-9 - ]。+) *(\。[az] {2,3})$“,'/')。 '/'; – Jake 2014-11-06 03:03:16

回答

0

的主要问题已经出来,你的正则表达式模式不被delimiters封闭。同样,你可以避免使用三元运算符,它不需要返回preg_match()的值。

function isValidEmail($email) { 
    $pattern = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i'; 
    return preg_match($pattern, $email); 
} 

您可以考虑使用filter_var()功能检查电子邮件地址是否是良好形成与否。

function isValidEmail($email) { 
    return filter_var($email, FILTER_VALIDATE_EMAIL) ? 1:0; 
} 
+0

函数'filter_var'不喜欢像'this.example @ gmail.com'这样普通和有效的电子邮件。如果它在'@'之前有'.',则函数返回'false'。 – 2014-11-06 04:22:58

0

你的模式应该是这样的,在模式之前和之后放上'/'。

/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})+$/ 

和+标志是指前最后$

相关问题