如何验证多个电子邮件地址在一个文本框或文本区域在同一时间使用php


How to validate multiple email addresses in a text box or text area at a time using php

我使用这个正则表达式来验证一封电子邮件。

/^[_a-z0-9-]+('.[_a-z0-9-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*('.[a-z]{2,3})$/

如何使用PHP验证文本框或文本区域中的多个电子邮件地址,其中逗号(,)和分号(;)分开。

例子:abac@gmail.com, abcd@gmail.com; abcede@gmail.com, acf@in.com

$emails = preg_split('[,|;]',$_POST['emails']);
foreach($emails as $e){
    if(preg_match('/^[_a-z0-9-]+('.[_a-z0-9-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*('.[a-z]{2,3})$/',trim($e)) == 0){
        echo($e ."is not a valid email address");
    }
}

应该把你收到的邮件分成一组邮件。然后将浏览每封邮件并检查正则表达式。将输出一个电子邮件是无效的,因为它发现他们。如果电子邮件是无效的,可以自由地将echo替换为您希望代码执行的任何操作。已编辑:逗号和分号同时断开

编辑:正则表达式被更改。(很抱歉我在发布之前没有检查过)

下面是如何将正则表达式转换为匹配列表的方法:使用正则表达式

验证逗号分隔列表

简单的方法是拆分字符串,然后验证每个条目(两者都是不精确的,因为地址中实际上允许使用逗号):

 $list = str_getcsv($emails);   // or preg_split on commas
 foreach ($list as $mail) {
     if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
         return false;
     }
 }

或者使用使用正则表达式来验证电子邮件地址,并将最后一行(?&address)/x交换为:

 ^'s* (?&address) ('s*,'s* (?&address) )* 's* $ /x