验证以逗号分隔的电子邮件列表

时间:2014-05-21 07:51:01

标签: javascript regex validation email

我正在尝试使用正则表达式来验证逗号分隔的电子邮件列表。

我想首先验证完整列表,然后拆分(“;”),然后从拆分中修剪每个数组值(每封电子邮件)。

我想验证以下表达式:

EMAIL,EMAIL  --> Ok
EMAIL, EMAIL  --> Ok
EMAIL , EMAIL  --> Ok
EMAIL , , EMAIL  --> Wrong
EMAIL , notAnEmail , EMAIL  --> Wrong

我知道验证电子邮件有很多复杂的表达方式,但我不需要任何花哨的东西,这对我有用:/\S+@\S+\.\S+/;

我想要简单明了的JS,而不是jQuery。感谢。

编辑:我已经考虑过拳击验证然后拆分,但是到目前为止我已尝试过的表达式,这将被验证为两个正确的电子邮件:

EMAIL, EMAIL  .  EMAIL

我想像每封电子邮件一样验证列表本身。

5 个答案:

答案 0 :(得分:8)

更简单的方法是删除空格并首先拆分字符串:

var emails = emailList.replace(/\s/g,'').split(",");

这将创建一个数组。然后,您可以遍历数组并检查元素是否为空并且是否为有效的电子邮件。

var valid = true;
var regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

for (var i = 0; i < emails.length; i++) {
     if( emails[i] == "" || ! regex.test(emails[i])){
         valid = false;
     }
}

注意:我得到了正则表达式from here

答案 1 :(得分:3)

另请注意,您需要删除额外的空格,因此需要添加额外的步骤,如下所示:

var emailStr = "felipe@google.com   , felipe2@google.com, emanuel@google.com\n";


function validateEmailList(raw){
    var emails = raw.split(',')


    var valid = true;
    var regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

    for (var i = 0; i < emails.length; i++) {
        if( emails[i] === "" || !regex.test(emails[i].replace(/\s/g, ""))){
            valid = false;
        }
    }
    return valid;
}


console.log(validateEmailList(emailStr))

通过添加.replace(/\s/g, ""),您可以确保删除所有空格,包括新行和标签。当我们摆脱所有空间时,样本的结果是正确的。

答案 2 :(得分:2)

我同意@ crisbeto的评论,但如果您确定这是您想要的方式,您可以通过匹配以下正则表达式来实现:

^(\s?[^\s,]+@[^\s,]+\.[^\s,]+\s?,)*(\s?[^\s,]+@[^\s,]+\.[^\s,]+)$

答案 3 :(得分:0)

我使用多年的正则表达式,代码是一样的。 我相信这适用于每一个人:

^(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]{2,4}\s*?,?\s*?)+$

快乐:)

答案 4 :(得分:-1)

const regExp = new RegExp(/^(\s?[^\s,]+@[^\s,]+\.[^\s,]+\s?,)*(\s?[^\s,]+@[^\s,]+\.[^\s,]+)$/);
const dom = document.getElementById("regExDom");
const result = regExp.test("test@gmail.com,test2@gmail.com,test3@test.com")
console.log("Regex test => ", result)
dom.innerHTML = result;
<div id="regExDom"></div>