使用javascript验证多个电子邮件逗号分隔

时间:2009-02-19 17:47:39

标签: javascript regex

我想验证一个字符串,该字符串可以是用逗号分隔的电子邮件或多封电子邮件。

例如:

bill.gates@hotmail.com - > TRUE
账单 - > FALSE
bill.gates @ microsoft.com,steve.jobs @ apple.com“ - > TRUE
bill.gates @ microsoft.com,steve.jobs @ apple.com,bob“ - > false
bob,bill.gates @ microsoft.com,steve.jobs @ apple.com“ - > false

我出来了下一个与测试用例一起使用的代码。

function validateEmail(field) {
    var regex=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i;
    return (regex.test(field)) ? true : false;
}

function validateMultipleEmailsCommaSeparated(value) {
    var result = value.split(",");
    for(var i = 0;i < result.length;i++)
    if(!validateEmail(result[i])) 
            return false;           
    return true;
}

这是最快捷的方式吗?如果我想允许怎么办和,作为分隔符?

9 个答案:

答案 0 :(得分:8)

您不应将顶级域名与[A-Z]{2,4}匹配:

.museum.travel呢?那些IDNA域名如.xn--0zwm56d.xn--11b5bs3a9aj6g

此外,拥有"John Doe"@example.org等电子邮件地址完全有效。

在我看来,您应该在客户端检查的是,地址是否包含@以及后面是否至少有一个.。在服务器端,您可以检查服务器是否存在(您甚至可能想尝试连接到相应的SMTP端口)或只发送验证邮件。

其他所有内容都容易出错,因为实际的正则表达式会检查有效的电子邮件地址looks like this


另外,这个

return (regex.test(field)) ? true : false;

是一个严重的WTF - test()已经返回一个布尔值!


如果要允许使用不同的分隔符,请使用正则表达式而不是字符串进行拆分,例如

value.split(/,|;/)

答案 1 :(得分:3)

使用var result = value.split(",")。你最终得到了一个数组。

答案 2 :(得分:2)

正则表达式:

((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*

答案 3 :(得分:1)

通常,验证电子邮件地址 。语法上有效的东西不一定会去任何地方,即使它是否会被阅读。

即便如此,覆盖所有可能的语法正确的地址(根据适用的RFC)需要一个极其复杂的正则表达式(请参阅第一版“掌握正则表达式”(Friedl,O'Reilly)的4724或6598字符版本,这些可能不会处理IDN)。例如。撇号是本地部分的有效字符,您可以在电子邮件中添加注释。

答案 4 :(得分:0)

如何将字符串拆分成数组并循环遍历它,一次只传递一个电子邮件地址?

答案 5 :(得分:0)

我使用validationEngine和underscore.js来执行此操作:

function validateEmail(field, rules, i, options) {
if (!_.all(field.val().split(","), function(candidate) { return $.trim(candidate).match(options.allrules.email.regex); } ))
    return options.allrules.email.alertText;
}

然后用:

装饰我的表格字段
<input class="validate[required,funcCall[validateEmail]]" type="text" name="contact_email" id="contact_email" value=""  />

答案 6 :(得分:0)

我会向$.trim(result[i])函数抛出validateMultipleEmailsCommaSeparated,因为很多人会在逗号后面添加空格。

当然这是一个jQuery的事情,所以你可以这样做。

答案 7 :(得分:0)

用于php preg_match_all()

$pattern = '/([\w+\._%-]+@[\w+\.-]+\.[\w+]{2,4}[^,;\s])/';
$text = 'abc@efg.com, efg, hij@emg.com, ak@efg asfbd@efg.com ab@sdfs.com abc+efg@pqr.com';
preg_match_all($pattern, $text, $match);
var_dump($match);

&#13;
&#13;
array(2) {
  [0] =>
  array(5) {
    [0] =>
    string(11) "abc@efg.com"
    [1] =>
    string(11) "hij@emg.com"
    [2] =>
    string(13) "asfbd@efg.com"
    [3] =>
    string(11) "ab@sdfs.com"
    [4] =>
    string(15) "abc+efg@pqr.com"
  }
  [1] =>
  array(5) {
    [0] =>
    string(11) "abc@efg.com"
    [1] =>
    string(11) "hij@emg.com"
    [2] =>
    string(13) "asfbd@efg.com"
    [3] =>
    string(11) "ab@sdfs.com"
    [4] =>
    string(15) "abc+efg@pqr.com"
  }
}
&#13;
&#13;
&#13;

答案 8 :(得分:0)

试试这个

     function validateEmails(string) {
        var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
        var result = string.replace(/\s/g, "").split(/,|;/);        
        for(var i = 0;i < result.length;i++) {
            if(!regex.test(result[i])) {
                return false;
            }
        }       
        return true;
    }

接受逗号和分号作为分隔符,如果只需要逗号作为分隔符

,请更改它