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