我正在使用 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。您是否尝试过将值记录到控制台以查看哪些地方可能会出现问题?
就代码效率而言,在大多数情况下,您的代码看起来不错。我认为您可以做一些事情来稍微缩小它:
在
each()中检查电子邮件有效性的部分,如果您返回值,当它为 false 时,它将停止处理其余电子邮件(毕竟,在一封坏邮件之后继续检查它们是没有意义的)。这是一个小变化:if(!isValidEmailFormat(email)) { return (isValid = false); }这将在第一次遇到无效的
email值时停止循环,并继续执行整个函数的return。您还可以通过使用实际的
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的所有实例,并且无需使用双斜杠 (\\)。另外,+不需要在字符组内转义,因此我将其删除。
除了这两件事之外,您的代码看起来还不错。






