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


filter_var : validate array of email addresses

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

这是我的表单:

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

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