首页 > 解决方案 > 电子邮件验证功能循环不推送所有值

问题描述

我有一个逗号分隔的字符串值,我正在尝试拆分和清理有效电子邮件。虽然我已经能够将字符串拆分为一个数组并具有验证电子邮件地址的数组项的功能,但它似乎没有遍历每个项并将有效的项推送到新数组。目前我只推送了一个值。

提供的是字符串:

'test@gmail.com, email, nice@test.com'

以下是功能:

function validateEmail(email) {
    var re = /^(([^<>()[\]\\.,;:\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,}))$/;
    return re.test(email);
}  

function emailParser(emailString){
    var preFilterEmails = emailString.split(",");
    var postFilterEmails = [];

    for(i = 0; i < preFilterEmails.length; i++){
        console.log(preFilterEmails);
        if(validateEmail(preFilterEmails[i])){
            console.log("Filtered");
            console.log(preFilterEmails[i]);
            postFilterEmails.push(preFilterEmails[i])
        }
    }
    return postFilterEmails;
}

电流输出:

[ 'test@gmail.com', ' email', ' nice@test.com' ]
Filtered
test@gmail.com
[ 'test@gmail.com', ' email', ' nice@test.com' ]
[ 'test@gmail.com', ' email', ' nice@test.com' ]
[ 'test@gmail.com' ]

标签: javascript

解决方案


这是因为逗号后的空格。你可以trim()之后split()

function validateEmail(email) {
    var re = /^(([^<>()[\]\\.,;:\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,}))$/;
    return re.test(email);
}  

function emailParser(emailString){
    var preFilterEmails = emailString.split(",").map(x=>x.trim());
    var postFilterEmails = [];

    for(i = 0; i < preFilterEmails.length; i++){
        console.log(preFilterEmails);
        if(validateEmail(preFilterEmails[i])){
            console.log("Filtered");
            console.log(preFilterEmails[i]);
            postFilterEmails.push(preFilterEmails[i])
        }
    }
    return postFilterEmails;
}
console.log(emailParser('test@gmail.com, email, nice@test.com'));


推荐阅读