簡體   English   中英

filter_var :驗證電子郵件地址數組

[英]filter_var : validate array of email addresses

我有一個下拉列表,當用戶選擇全部時,它將向我從數據庫中獲得的所有收件人發送電子郵件。 如果用戶選擇“其他”,則會出現一個文本字段,用戶必須在其中輸入電子郵件地址。 我想驗證用戶在“其他”文本字段中輸入的電子郵件是否有效。 我想讓用戶能夠輸入多個電子郵件地址,用逗號分隔。

這是我的表格:

 <tr> <td>To</td> <td>:</td> <td> <select name="email" id="email" onchange="if(this.value == 'Other') {this.form['Other'].style.visibility='visible'}else{this.form['Other'].style.visibility='hidden'};"> <option value=""></option> <option value="All">All</option> <option value="Other">Other</option> </select> <?php if(isset($error[ 'email'])) echo $error[ 'email']; ?> <input type="text" id="Other" name="Other" style="visibility:hidden;" size="46" placeholder="Enter e-mail separated with commas" /> <?php if(isset($error[ 'Other'])) echo $error[ 'Other']; ?> </td> </tr>

這是我對電子郵件的驗證:

 if($_POST['Other'] != "" && (!filter_var($_POST['Other'], FILTER_VALIDATE_EMAIL))) { $error['Other'] = "<div class=error>Email entered is not valid.</div>"; }

我使用 FILTER_VALIDATE_EMAIL 來驗證電子郵件地址。 我的問題是,如果輸入了一個電子郵件地址,沒有問題,消息將被發送,我收到了。 但如果我輸入了不止一封電子郵件,驗證錯誤消息將提示我輸入的電子郵件地址無效。 我能知道為什么它只適用於一封電子郵件而不適用於多個電子郵件地址嗎?

你需要做這樣的事情,

$emails = 'bill@microsoft.com, test.com, obama@usa.gov';
$emails = explode(', ', $email);
$filterd_emails = array();
foreach($emails as $email){
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $error['Other'][] = "<div class=error>$email is not valid Email.</div>";
    }else{
        $filtere_emails[] = $email
    }
}

編輯

現在您已將所有經過驗證的電子郵件存儲在$filtered_emails 這里有兩個不同的場景。

1 ) 無論有多少通過標准,您都希望將電子郵件發送給所有已filtered_emails電子郵件(通過標准)。

//$emails = 'bill@microsoft.com, test.com, obama@usa.gov';
$filtered_emails = array('bill@microsoft.com', 'obama@usa.gov');

為此,您可以使用以下方法,它會跳過test.com並將電子郵件發送給其他兩個

if(count($filtered_emails) > 0)
foreach($filtered_emails as $filtered_email){
    //send email here. email($filtered_email);
}

2 ) 如果任何輸入電子郵件未能通過驗證,您不希望向任何人發送電子郵件。

例如test.com未能通過標准,您根本不想發送電子郵件(發送給其他兩個bill@microsoft.comobama@usa.gov

在這種情況下,

if(count($error['other'])>0){
    //display error and exit
}

現在完全取決於您想使用哪種技術。

用PHP的explode函數將email字符串轉成數組

然后我們實例化一個PHP數組函數並將其設置為一個變量作為一個空數組

然后我們用 PHP foreach 循環函數遍歷數組

然后我們檢查每封電子郵件的有效性 PHP filter_var 和 FILTER_VALIDATE_EMAIL 函數 filter_var(!filter_var(bill@microsoft.com, FILTER_VALIDATE_EMAIL))

<?php
  $emails = 'bill@microsoft.com, test.com, obama@usa.gov';
  $emails = explode(', ', $email);
  $filterd_emails = array();
  foreach($emails as $email){
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
       $error['Other'][] = "<div class=error>$email is not valid Email.</div>";
    }else{
       $filtered_emails[] = $email
    }
  }
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM