连接电子邮件正则表达式

时间:2014-04-28 13:35:27

标签: javascript jquery regex

我正在使用js / jquery来检查字符串的有效格式,该字符串可以包含一到五个以逗号分隔的电子邮件地址。在使用以下方法时,我只有一个传递不应该通过的案例:

    function isValidEmails(concatenatedEmails)
    {
        var compressedEmails = concatenatedEmails.replace(/ /g,'');
        var emails = compressedEmails.split(',');
        var isValid = true;
        if(emails.length > 0 && emails.length <= 5)
        {
            $.each(emails, function(index, email)
            {
                if(!isValidEmailFormat(email))
                {
                    isValid = false;
                }
            });
        }
        else
        {
            isValid = false;
        }
        return isValid;
    }

    function isValidEmailFormat(email)
    {
        return email.match("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
                    + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
    }

这些方法会捕获除传递的字符串之外的所有内容,例如:

"e1@mail.com, e2@mail.com, e3@mail.com, asdf"

这会捕获其他所有内容,但不知何故,此字符串将通过验证。有人可以说明如何提高效率吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的代码实际上对我来说运行正常。 。 。当“asdf”值在那里时返回false,当我从列表中删除该值时返回true。您是否尝试将值记录到控制台以查看可能会破坏的位置?


至于代码效率,在大多数情况下,您的代码看起来很好。我只能看到一些你可以做的事情来修剪它:

  1. each()中检查电子邮件有效性的部分中,如果您return该值,则当它为false时,它将停止处理其余电子邮件(毕竟,继续检查它们是没有意义的,一个是坏的)。这是一个很小的变化:

    if(!isValidEmailFormat(email)) {
        return (isValid = false);
    }
    

    这将在第一次触及无效email值时停止循环,然后转到整个函数的return

  2. 您还可以通过使用和实际的RegExp值而不是字符串)并添加i标志来使正则表达式稍微复杂一点,以使模式不区分大小写。

    function isValidEmailFormat(email) {
        return email.match(/^[a-z0-9+_-]+(\.[a-z0-9_-]+)*@[a-z0-9-]+(\.[a-z0-9]+)*(\.[a-z]{2,})$/i);
    }
    

    这使您可以删除A-Z的所有实例,并且无需使用双斜杠(\\)。此外,+不需要在字符组中进行转义,因此我删除了它。

  3. 除了这两件事,你的代码看起来还不错。