2011-03-21 68 views
1

以下是我最近一次失敗的嘗試:如何在php會話中使用filter_val驗證電子郵件?

if ($_SERVER['REQUEST_METHOD']=="POST") { 

if (!empty($_SESSION['email'])) { 

     if(!filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) { 
      echo "Required: valid e-mail address"; 
      } else { 
        echo "Your email is " . $_SESSION['email'] . "<br />"; 
       } 

    } else { 
    echo "Required: valid e-mail address"; 
      } 
} 

//當變量是空的,我得到正確的消息,但如果我輸入了無效或有效的電子郵件,沒有什麼呼應。我一整天都在這裏。

+0

我覺得我們需要更多信息。如果什麼都沒有迴應,那麼一定的錯誤必須被解僱。你的錯誤日誌中有什麼,或者如果你打開error_reporting? – 2011-03-21 03:15:44

+1

爲什麼你要檢查一個有效的電子郵件會話?爲什麼在設置電子郵件會話變量之前不檢查? – Prisoner 2011-03-21 03:21:58

+0

請考慮使用[Dominic Sayers優秀的'is_email'庫](http://code.google.com/p/isemail/)而不是PHP的過濾器。 [內置過濾器失敗了許多符合RFC的地址](http://www.dominicsayers.com/isemail/results.php)。 – Charles 2011-03-21 03:31:09

回答

2
if(filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL)) { 
    // it's valid so do something 
} 
else { 
    // it's not valid so do something else 
} 
+0

請解釋這與OP的原始代碼有何不同。 – Charles 2011-03-21 03:32:34

+0

這個在我的電腦上爲我工作。所以我發佈瞭解決方案。而已。 – 2011-03-21 03:35:42

+0

同樣的錯誤;相同的結果。如果相同的代碼適用於Coding-Freak,那麼我的錯誤必須在其他地方。我會尋找其他的可能性。 – Don 2011-03-21 04:17:39

0

是舊帖子,但這會有所幫助。

function valid_email($email) 
{ 
    if(is_array($email) || is_numeric($email) || is_bool($email) || is_float($email) || is_file($email) || is_dir($email) || is_int($email)) 
     return false; 
    else 
    { 
     $email=trim(strtolower($email)); 
     if(filter_var($email, FILTER_VALIDATE_EMAIL)) return $email; 
     else 
     { 
      $pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD'; 
      return (preg_match($pattern, $email) === 1) ? $email : false; 
     } 
    } 
} 

此功能使用filter_var和檢查電子郵件有「超級域」。