我正在使用 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" 

这捕获了其他所有内容,但不知何故该字符串将通过验证。有人可以告诉我如何提高效率吗?感谢您的帮助。

请您参考如下方法:

你的代码实际上对我来说运行得很好。 。 。当“asdf”值存在时,它返回 false;当我从列表中删除该值时,它返回 true。您是否尝试过将值记录到控制台以查看哪些地方可能会出现问题?

<小时 />

就代码效率而言,在大多数情况下,您的代码看起来不错。我认为您可以做一些事情来稍微缩小它:

  1. each() 中检查电子邮件有效性的部分,如果您返回值,当它为 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 的所有实例,并且无需使用双斜杠 (\\)。另外,+ 不需要在字符组内转义,因此我将其删除。

除了这两件事之外,您的代码看起来还不错。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!