2013-11-01 63 views
1

我想驗證一些電子郵件地址。 輸入由用戶在一個textarea給出的地址由逗號分隔,這樣的:PHP:驗證數組中的電子郵件地址

[email protected][email protected]等等,等等

這是我的腳本用它來檢查地址:

$emailadressen = explode(',', $_POST['uitnodigen']); 

     $aantal = count($emailadressen); 
     $i = 1; 

    foreach($emailadressen as $emails) 
     {  
      if(check_email_address($emails) == false) { 
      $Melding['omschrijving'] = '<div class="error">Error in address number '.$i.'</div>'; 
      $i++; 
      } 
     } 

這是我使用的功能:

function check_email_address($email) { 
    // First, we check that there's one @ symbol, and that the lengths are right 
    if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) { 
     // Email invalid because wrong number of characters in one section, or wrong number of @ symbols. 
     return false; 
    } 
    // Split it into sections to make life easier 
    $email_array = explode("@", $email); 
    $local_array = explode(".", $email_array[0]); 
    for ($i = 0; $i < sizeof($local_array); $i++) { 
     if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) { 
      return false; 
     } 
    } 
    if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name 
     $domain_array = explode(".", $email_array[1]); 
     if (sizeof($domain_array) < 2) { 
      return false; // Not enough parts to domain 
     } 
     for ($i = 0; $i < sizeof($domain_array); $i++) { 
      if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) { 
       return false; 
      } 
     } 
    } 

    return true; 
} 

當陣列中只包含一個EMAILADDRESS沒有問題和EV一切工作正常。

但是,當我至少有2個電子郵件地址時,每次都會收到FALSE錯誤。 (即使電子郵件地址有效)

我該怎麼做?

+1

您可能想查看[php電子郵件過濾器](http://php.net/manual/en/filter.filters.validate.php)。 – Fluffeh

+0

http://stackoverflow.com/questions/13719821/email-validation-using-regular-expression-in-php –

回答

1

我覺得空間越來越通過修剪

您的電子郵件地址嘗試添加
foreach($emailadressen as $emails) { 
     if(check_email_address(trim($emails)) == false) { 
      echo '<div class="error">Error in address number '.$i.' ' . $emails. '</div>'; 
     } 
     else { 
      echo '<div class="noerror">No Error in address number '.$i. ' ' . $emails. '</div>'; 
     } 
     $i++; 
    } 
1

使用filter,你應該能夠簡單地使用:

foreach($emailadressen as $emails) 
{  
    if(!filter_var($emails, FILTER_VALIDATE_EMAIL)) 
    { 
     $Melding['omschrijving'] = '<div class="error">Error in address number '.$i.'</div>'; 
     $i++; 
    } 
} 

在不需要任何巨大作用的。

這是假設您運行此foreach時,來自帖子的數組僅包含電子郵件。

+0

這也會返回錯誤。 –

+0

例如: 我把那些2個地址: [email protected]和[email protected] 輸出: patrickmyname @的Hotmail。com是無效 腳本: \t \t \t $ emailaddresses =爆炸( '',$ _ POST [ '邀請']); \t \t \t \t \t \t數目的$ =計數($電子郵件地址); \t \t \t $ I = 1; \t \t \t \t \t的foreach($電子郵件地址爲$電子郵件) \t \t {\t \t \t如果(!Filter_var($電子郵件,FILTER_VALIDATE_EMAIL)) { \t \t \t $信號[ '電子郵件錯'] =「

'.$emails.' is '.(filter_var($emails, FILTER_VALIDATE_EMAIL) ? '' : 'not').' valid

「; \t \t \t $ I ++; \t \t \t}} –

2

我會用

filter_var($email, FILTER_VALIDATE_EMAIL) 

和:

filter_var($email, FILTER_SANITIZE_EMAIL) 

就像

foreach($emailadressen as $email) 
    {  
    if(filter_var($email, FILTER_SANITIZE_EMAIL === FALSE) || 
     filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) 
    { 
    $Melding['omschrijving'] = 
    '<div class="error">Error in address number '.$i.'</div>'; 
    $i++; 
    } 
    }