为什么这个jsfiddle崩溃?

时间:2014-05-25 23:16:13

标签: javascript jquery jsfiddle

我正在执行验证电子邮件地址的功能,用户可以输入多个电子邮件,以分号分隔。 我想用不同的情况尝试我的功能,所以我做了一个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

2 个答案:

答案 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重置为01(任何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;

}