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

时间:2015-09-12 10:47:46

标签: php validation email filter-var

我有一个下拉列表,当用户选择All时,它会向我从数据库中获取的所有收件人发送电子邮件。如果用户选择'其他',则会出现一个文本字段,用户必须输入该电子邮件地址。我想验证用户在'其他'中输入的电子邮件。 textfield有效。我想允许用户输入多个电子邮件地址,用逗号分隔。

这是我的表格:



<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>
&#13;
&#13;
&#13;

这是我对电子邮件的验证:

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

我使用FILTER_VALIDATE_EMAIL来验证电子邮件地址。我的问题是,如果输入一个电子邮件地址,没有问题,邮件将被发送,我收到了。但是,如果我输入了多封电子邮件,验证错误消息将提示我输入的电子邮件地址无效。我能知道它为什么只适用于一封电子邮件但不适用于多个电子邮件地址?

2 个答案:

答案 0 :(得分:1)

你需要这样做,

$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 )如果任何输入电子邮件无法通过验证,您不希望向任何人发送电子邮件。

e.g。 test.com未能通过条件,您根本不想发送电子邮件(其他两个bill@microsoft.comobama@usa.gov

在这种情况下,

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

现在完全取决于你想要使用哪种技术。

答案 1 :(得分:0)

使用PHP爆炸功能将电子邮件字符串转换为数组

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