2011-12-23 42 views
0

我正在使用此正则表达式验证一个电子邮件。如何一次验证文本框或文本区域中的多个电子邮件地址使用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

+0

我认为首先你需要从文本中提取所有的电子邮件模式,然后验证它们。 – Arfeen 2011-12-23 07:40:37

+4

如果可用,请使用['mailparse_rfc822_parse_addresses()'](http://php.net/mailparse_rfc822_parse_addresses)。否则,将逗号分隔列表,修剪并验证每个列表条目(使用不符合的正则表达式或'filter_var(..,FILTER_VALIDATE_EMAIL)')。 – mario 2011-12-23 07:42:22

+1

因此...拒绝其中包含“+”的电子邮件地址,以及任何来自“.info”或“.museum”TLD的电子邮件地址。这个正则表达式更糟,那么大多数尝试检查电子邮件地址。 – Quentin 2011-12-23 08:52:34

回答

3
$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"); 
    } 
} 

应该打破你收到的电子邮件到电子邮件的数组。然后将通过每封电子邮件并检查正则表达式。输出该电子邮件无效,因为它发现它们。如果电子邮件无效,请随意将代码替换为代码执行的任何内容。 编辑:打破逗号和分号

编辑:正则表达式已更改。 (对不起,我还没有发布之前,检查它。)

+0

我想同时使用逗号和分号分隔值进行验证。这将帮助我只做一个分离的值。 – vvr 2011-12-23 08:36:30

+0

对不起,误解了这个问题。好吧,现在它应该同时使用逗号和分号。 – 2011-12-23 08:49:28

+0

我收到警告,当我尝试像这样 警告:preg_split()[function.preg-split]:分隔符不能是字母数字或反斜杠 警告:为foreach提供的无效参数() – vvr 2011-12-23 09:16:09

2

好,这里是如何将正则表达式转换成匹配的东西列表的HOWTO:validate comma separated list using regex

简单的方法是分手了你的字符串,然后验证每个条目(无论是不精确的,如逗号的地址实际上是允许的):

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

或者你使用Using a regular expression to validate an email address和交换的最后一行(?&address)/x为:

^\s* (?&address) (\s*,\s* (?&address))* \s* $ /x 
+0

我要同时使用逗号和分号分隔值进行验证。这将帮助我只做一个分离的值。 – vvr 2011-12-23 08:49:49

+1

您可以使用'[,;]'作为正则表达式或使用自定义'preg_split'。 – mario 2011-12-23 08:58:23