我正在执行验证电子邮件地址的功能,用户可以输入多个电子邮件,以分号分隔。 我想用不同的情况尝试我的功能,所以我做了一个jsfiddle。 但是当我尝试运行小提琴时,它似乎在调用我的函数IsValidEmailFormat时崩溃。
这是我要测试的功能。
function IsValidEmailFormat(input) {
var isValid = true;
if (input.length > 0) {
var emailsToValidate = input.split(";");
//this regex for the common mail format
var regExp1 = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
for (i = 0; i < emailsToValidate.length-1; i++) {
if (!regExp1.test(emailsToValidate[i])) {
isValid = false;
return isValid;
}
//TODO: Add more validations rules if neccesary
}
}
return isValid;
}
有什么想法吗?这是我的fiddle
答案 0 :(得分:2)
问题出在for
循环中,您需要将i
定义为局部变量,否则您将遇到范围问题,并且您的循环将无法按预期工作。
更改这些
for (i = 0; i < testEmails.length-1; i++) {
for (i = 0; i < emailsToValidate.length-1; i++) {
到
for (var i = 0; i < testEmails.length-1; i++) {
for (var i = 0; i < emailsToValidate.length-1; i++) {
答案 1 :(得分:1)
您需要用户var
。我认为发生的事情就是当你不使用var时,变量变为全局变量并且它会破坏你的for循环。 runTests
中的for循环无法完成,因为您不断将i
重置为0
或1
(任何testEmails
数组的最大大小)< / p>
您还需要在正则表达式中转义。我将其更改为正则表达式文字,因此更容易发现。
So my fiddle应该正常工作。
function runTests() {
var div = $("#testResults");
var line;
for (var i = 0; i < testEmails.length; i++) {
console.log(testEmails[i]);
line = "<p>" + testEmails[i] + "</p>";
result= IsValidEmailFormat((testEmails[i]));
console.log(result);
div.append(line);
}
}
function IsValidEmailFormat(input) {
var isValid = true;
if (input.length > 0) {
var emailsToValidate = input.split(";");
//this regex for the common mail format
var regExp1 = /[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/
for (var i = 0; i < emailsToValidate.length; i++) {
console.log("testing", i);
if (!regExp1.test(emailsToValidate[i])) {
isValid = false;//
return isValid;
}
//TODO: Add more validation example
}
}
return isValid;
}