2013-11-27 25 views
0

我試圖編寫一個註冊表單,用於驗證用於註冊的電子郵件。特定領域的電子郵件驗證

簡而言之,我想確保用於註冊的電子郵件ID是公司域,而不是像Gmail或雅虎。

我有以下代碼來檢查一個電子郵件是否是給定域的一部分,我如何修改這個來檢查它是否在給定的域名列表中? (例如:gmail.com,yahoo.com,hotmail.com等)。

return (bool) preg_match('/^([a-z0-9\+\_\-\.]+)@([a-z0-9\+\_\-\.]{2,})(\.[a-z]{2,4})$/i', $domain); 

林認爲它應該是沿着這些線路,但不能完全肯定:

function validate($email) 
{ 
$error = 0; 
$domains = array('gmail.com','yahoo.com','hotmail.com'); 
foreach($domains as $key=>$value) 
{ 
if(preg_match('/^([a-z0-9\+\_\-\.]+)@([a-z0-9\+\_\-\.]{2,})(\.[a-z]{2,4})$/i', $value) 
{ 
$error=1; 
} 
} 
if($error==0) 
return true; 
else 
return false; 

編輯:我想在這裏給出的所有答案,形式仍然提交沒有問題,不管是什麼領域我使用! (即使是一個非電子郵件似乎工作!)

這是我如何調用該函數 -

if(isset($_POST['clients_register'])) 
{ 

     //Must contain only letters and numbers 
     if(!preg_match('/^[a-zA-Z0-9]$/', $_POST['name'])) 
     { 
      $error[]='The username does not match the requirements';   
     } 
     //Password validation: must contain at least 1 letter and number. Allows characters [email protected]#$% and be 8-15 characters 
     if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,15}$/', $_POST['password'])) 
     { 
      $error[]='The password does not match the requirements'; 
     } 
     //Email validation 
     if (validateEmail($_POST['email'])==false) 
     { 
      $error[]='Invalid E-mail'; 
     }  
     //Output error in array as each line 
     if (count($error) > 0) 
      { 
      foreach ($error as $output) { 
       echo "{$output} <br>"; 
      } 
     } else { 
      //Syntax for SQL Insert into table and Redirect user to confirmation page 
     } 
} 

問題是,無論我做什麼,用戶被重定向到確認頁面(即使名稱由數字和電子郵件形成,如「table」

+1

'$ email_parts = split('@',$ email); if(in_array($ email_parts [1],$ domains)............' – DevlshOne

+0

添加「googlemail.com」,它的另一個域名gmail ... – MeNa

+0

這些大郵件有什麼問題服務?使用不在你的名單上的域名並不能保證它屬於一個公司,並且公司也可能在他們的域名下使用谷歌郵件。我想知道你想從黑名單中得到什麼效果。 – Sven

回答

2

你應該在單獨的步驟中做到這一點首先檢查電子郵件地址是否有合法的語法,比提取域名並查看它是否不在你的黑名單

function validate($email) 
{ 
    if (!preg_match('/^([a-z0-9\+\_\-\.]+)@([a-z0-9\+\_\-\.]{2,})(\.[a-z]{2,4})$/i', $email)) return false; 

    $domains = array('gmail.com','yahoo.com','hotmail.com'); 
    list(, $email_domain) = explode('@', $email, 2); 
    return !in_array($email_domain, $domains); 
} 
+0

我試過這個,我用我打電話給電子郵件的方式編輯了我原來的帖子,但似乎仍然不起作用! –

+0

驗證函數是正確的。驗證是否完成?問題在於別處。如果輸入錯誤的用戶名(如'W @ rnold'),什麼是'$ _POST ['clients_register']',爲什麼不做'如果($ _ SERVER ['REQUEST_方法'] ==='POST')){'反而? –

+0

這是我使用Dreamweaver的插入記錄選項時的默認值!但我會以你的方式嘗試,並讓你知道它是如何工作的! –

0

PHP

// Suposing that $email is a valid email 
function validate($email) { 
    $invalidDomains = array('gmail.com','yahoo.com','hotmail.com'); 
    $parts = explode('@',$email); 
    $domain = $parts[1]; 
    if(!in_array($domain,$invalidDomains)) return true; 
    return false; 
} 

讓我知道,如果它是有用的。

0
function validateEmail($email) 
{ 
    // Etc, just an array of the blacklisted domains 
    $blacklistDomains = ['gmail.com', 'yahoo.com', 'hotmail.com', 'googlemail.com']; 
    // Check if the email is valid 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     return false; 
    } 

    // Split the email after the '@' to get the domain 
    $emailParts = explode('@', $email); 

    if (in_array(end($emailParts), $blacklistDomains)) { 
     return false; 
    } 

    return true; 
} 

您需要一個非常大的域列表。