使用JavaScriptvalidation多封电子邮件

我有这两个function:

validateEmail: function(value) { var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; return (regex.test(value)) ? true : false; } validateEmails: function(string) { var self = shareEmail; var result = string.replace(/\s/g, "").split(/,|;/); for(var i = 0;i < result.length;i++) { if(!self.validateEmail(result[i])) { return false; } else { return true; } } } 

问题是,当我测试这样的电子邮件if(!self.validateEmails(multipleEmails)) {我只根据字符串中的第一封电子邮件得到真或假,但我想测试字符串中的任何电子邮件。

谢谢!

问题是你的if / else块; 你在两种条件下都回来了。 这意味着它只评估一个元素后离开函数。

我已修改validateEmails以演示您可能要执行的操作:

 validateEmail: function(value) { var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; return (regex.test(value)) ? true : false; } validateEmails: function(string) { var self = shareEmail; var result = string.replace(/\s/g, "").split(/,|;/); for(var i = 0;i < result.length;i++) { if(!self.validateEmail(result[i])) { return false; } } return true; } 

这个怎么样?

 validateEmails: function(string) { var self = shareEmail; var result = string.replace(/\s/g, "").split(/,|;/); var errors = []; for(var i = 0;i < result.length;i++) { if(!self.validateEmail(result[i])) { errors[i] = result[i] + ' is not valid.'; } } if (errors.length > 0) { alert(errors.join('\n')); return false; } else { return true; } } 

我发现最可维护的方法是使用变量来存储返回输出。

 validateEmail: function(value) { var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; return (regex.test(value)) ? true : false; } validateEmails: function(string) { var self = shareEmail; var result = string.replace(/\s/g, "").split(/,|;/); var allOk = true; for(var i = 0;i < result.length;i++) { if(!self.validateEmail(result[i])) { allOk = false; } } return allOk; } 

如果您使用jquery-validate,validation方法将如下所示:

 jQuery.validator.addMethod("separated_emails", function(value, element) { if (this.optional(element)) { return true; } var mails = value.split(/,|;/); for(var i = 0; i < mails.length; i++) { // taken from the jquery validation internals if (!/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(mails[i])) { return false; } } return true; }, "Please specify a email address or a comma separated list of addresses"); 

下面的代码非常适合使用JQueryvalidation用逗号或分号分隔的多个电子邮件地址:

  var emailReg = new RegExp(/^([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[AZ]{2,6})*([,;][\s]*([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[AZ]{2,6}))*$/i); var emailText = $('#email').val(); if (!emailReg.test(emailText)) { alert('Wrong Email Address\Addresses format! Please reEnter correct format'); return false; }