filter_var : 验证电子邮件地址数组

filter_var : validate array of email addresses

我有一个下拉列表,当用户选择全部时,它将向我从数据库中获得的所有收件人发送电子邮件。如果用户选择 'Other',将出现一个文本字段,用户必须在其中输入电子邮件地址。我想验证用户在 'Other' 文本字段中输入的电子邮件是否有效。我想让用户能够输入多个用逗号分隔的电子邮件地址。

这是我的表格:

<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 函数将电子邮件字符串转换为数组

然后我们实例化一个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
    }
  }
?>