2013-11-01 4 views
1

일부 전자 메일 주소의 유효성을 검사하고 싶습니다. 입력이 텍스트 영역에 사용자에 의해 주어진 상기 주소 같이, 콤마로 구분된다 PHP : 배열의 전자 메일 주소 유효성 검사

[email protected], [email protected], 등등

이 스크립트는 I

$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++; 
      } 
     } 

그리고 이것은 내가 사용하는 기능입니다 : : 배열은 하나의 EMAILADDRESS이 문제와 EV 없다 포함 된 경우

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; 
} 

주소를 확인하는 데 사용 erything 잘 작동합니다.

하지만 적어도 2 개의 emailaddress를 가질 때마다 매번 오류 오류가 발생합니다. (이메일 주소가 유효한 경우에도)

내가 뭘 잘못 했니?

+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를 실행할 때까지 게시물의 배열에 전자 메일 만 포함되어 있다고 가정합니다. 내가

filter_var($email, FILTER_VALIDATE_EMAIL) 

그리고 사용했을

+0

또한 오류를 반환합니다. 예를 들어 –

+0

: 내가 그 둘 개 주소에 넣어 : [email protected] 및 [email protected] 출력 : patrickmyname의 @ 핫메일.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 내가 ++; \t \t \t}} –

2

: 나는 공간이

트림 사용하여 전자 메일 주소 시도에 추가하기 생각

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++; 
    } 
    } 
관련 문제