2011-04-03 75 views
0

下面的代碼:擁有在PHP中驗證的電子郵件地址與的preg_match問題

if(trim($_POST['email']) == '') { 
     $hasError = true; 
    } else if (!preg_match("/^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) { 
     $hasError = true; 
    } else { 
     $email = trim($_POST['email']); 
    } 

這裏的錯誤信息:

警告:的preg_match()[function.preg匹配]:沒有結束符「在/home/bigsilkd/public_html/UBA/join.php /」裏找到的第22行

+1

問題是你沒有使用正確的正則表達式來驗證電子郵件地址。正確的可以在這裏找到:http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html – Domenic 2011-04-03 18:22:04

+1

'filter_var($ _ POST ['email'],FILTER_VALIDATE_EMAIL);'是要複雜嗎? – Wrikken 2011-04-03 18:23:58

回答

5

這也正是它說:

preg_match("/^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$" 

應該是

preg_match("/^[A-Z0-9._%-][email protected][A-Z0-9._%-]+\.[A-Z]{2,4}$/" 
                ^
                 | 
            This was missing ---/ 
5

您不應該使用正則表達式來驗證電子郵件。例如,你的正則表達式不允許我的電子郵件地址[email protected],這是一個正常和有效的電子郵件。保存我的郵件!由於表單驗證不正確,它正在消失!使用filter_var

if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
    // email is valid 
}