2012-08-24 35 views
5

Tôi có hai chức năng:Validate nhiều email với JavaScript

validateEmail: function(value) { 
    var regex = /^([\w-\.][email protected]([\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; 
     } 
    } 
} 

Vấn đề là khi tôi kiểm tra email như if(!self.validateEmails(multipleEmails)) { này tôi nhận được đúng hay sai chỉ dựa trên email đầu tiên trong chuỗi, nhưng tôi muốn kiểm tra bất kỳ email nào trong chuỗi.

Cảm ơn bạn!

+0

Điều gì chứa nhiều email? –

+0

'^' và '$' trong regex làm cho nó khớp với toàn bộ chuỗi. Xem http://www.regular-expressions.info/reference.html để tìm hiểu thêm về các biểu thức chính quy – Znarkus

+0

@Bartimeus Đó là giá trị của một đầu vào văn bản ... về cơ bản là một chuỗi có (các) email được phân tách bằng dấu phẩy hoặc dấu chấm phẩy. –

Trả lời

9

Vấn đề là khối if/else của bạn; Bạn đang quay trở lại dưới cả hai điều kiện. Điều đó có nghĩa là nó rời khỏi hàm sau khi đánh giá chỉ một phần tử.

Tôi đã sửa đổi validateEmails để chứng minh những gì bạn có thể muốn làm:

validateEmail: function(value) { 
    var regex = /^([\w-\.][email protected]([\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; 
} 
+0

Làm thế nào tôi có thể không thấy nó ... x) –

+0

@Mythril Cảm ơn bạn !!! –

+0

điều này thực sự đã giải quyết được vấn đề của bạn như thế nào? – Gustonez

1

tôi tìm cách duy trì nhất là sử dụng một biến để lưu trữ đầu ra trở lại.

validateEmail: function(value) { 
    var regex = /^([\w-\.][email protected]([\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; 
} 
2

thế nào về điều này?

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; 
    } 

} 
+0

Cảm ơn bạn đã trả lời, giải pháp tuyệt vời! –

1

trong trường hợp bạn sử dụng jquery-xác nhận các phương thức xác nhận sẽ trông như thế:

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.!#$%&'*+\/=?^_`{|}~-][email protected][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"); 
+0

Chính xác những gì tôi cần, mặc dù tôi đã sử dụng biểu thức RegEx khác nhau để có phạm vi email không hợp lệ được cải thiện: '' '/^(([A-Za-z0-9] + _ +) | ([A-Za-z0-9 ] + \ - +) | ([A-Za-z0-9] + \. +) | ([A-Za-z0-9] + \ ++)) * [A-Za-z0-9] + @ ((\ w + \ - +) | (\ w + \.)) * \ w {1,63} \. [a-zA-Z] {2,6} $/'' ' –

0

Mã này dưới đây được hoàn hảo để xác nhận nhiều địa chỉ email cách nhau bằng dấu phẩy hoặc dấu chấm phẩy sử dụng JQuery:

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

Câu trả lời của bạn không trả lời cho vấn đề cụ thể của OP. – dakab

Các vấn đề liên quan