Javascript 为什么会发生JSFIDLE崩溃?

Javascript 为什么会发生JSFIDLE崩溃?,javascript,jquery,jsfiddle,Javascript,Jquery,Jsfiddle,我正在做一个功能来验证电子邮件地址,一个用户可以输入几个电子邮件,用分号分隔。 我想在不同的情况下尝试我的函数,所以我制作了一个JSFIDLE。 但是当我尝试运行fiddle时,调用我的函数IsValidEmailFormat时,它似乎崩溃了 这是我要测试的函数 function IsValidEmailFormat(input) { var isValid = true; if (input.length > 0) { var emailsToValidate = input.

我正在做一个功能来验证电子邮件地址,一个用户可以输入几个电子邮件,用分号分隔。 我想在不同的情况下尝试我的函数,所以我制作了一个JSFIDLE。 但是当我尝试运行fiddle时,调用我的函数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;
函数IsValidMailFormat(输入){
var isValid=true;
如果(input.length>0){
var emailsToValidate=input.split(“;”);
//此正则表达式用于通用邮件格式
var regExp1=新的RegExp(“[a-z0-9!#$%&'*+/=?^{124}-]+(?:\.[a-z0-9!#$%&'*+/=?^{124}-]+)*([a-z0-9](?:[a-z0-9-]*[a-z0-9])+[a-z0-9](?:[a-z0-9-];
对于(i=0;i
}


有什么想法吗?这是我的

您需要使用
var
。我认为发生的事情是,当你不使用var时,变量变为全局变量,它会弄乱你的for循环。
runTests
中的for循环永远不会结束,因为您一直在将
i
重置回
0
1
(任何
testemail
数组的最大大小)

您还需要在正则表达式中转义。我将其更改为正则表达式文字,以便更容易识别

他应该在工作

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;

}
函数运行测试(){
var div=$(“#测试结果”);
var线;
对于(var i=0;i”;
结果=IsValidMailFormat((testEmails[i]);
控制台日志(结果);
div.append(行);
}
}
函数IsValidEmailFormat(输入){
var isValid=true;
如果(input.length>0){
var emailsToValidate=input.split(“;”);
//此正则表达式用于通用邮件格式
var regExp1=/[a-z0-9!\$%和'*+\/=?^{{124}-]+(?:\.[a-z0-9!\$%&'*+\/=?^{124}-]+)*([a-z0-9](?:[a-z0-9-]*[a-z0-9])+[a-z0-9](?:[a-z0-9-]*[a-z0-9]。]/
对于(var i=0;i
问题在于
循环的
中,您需要将
i
定义为局部变量,否则您将在作用域方面遇到问题,并且循环将无法按预期工作

改变这些

for (i = 0; i < testEmails.length-1; i++) {
for (i = 0; i < emailsToValidate.length-1; i++) {
for(i=0;i

for(var i=0;i
它似乎没有崩溃。您得到的确切错误是什么?对我来说没有崩溃,可能您使用的浏览器不好?注意:对于
RegExp
构造函数,可能需要对
字符串和
RegExp
文本的转义序列进行双转义,例如
new RegExp(“\\”)
匹配文字句点。您想知道哪些电子邮件是坏的,或者其中任何一封是坏的,或者是什么吗?请记住,调用函数的那一行是有注释的。第15行。请先尝试取消注释。我正在使用Chrome
for (var i = 0; i < testEmails.length-1; i++) {
for (var i = 0; i < emailsToValidate.length-1; i++) {