2014-11-06 63 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})+$/ 

和+標誌是指前最後$

相關問題