2012-08-24 8 views
5

mam te dwie funkcje:walidacji kilka e-maili z 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; 
     } 
    } 
} 

Problem polega na tym, że podczas testowania ja e-maila jak to if(!self.validateEmails(multipleEmails)) { ja dostać prawdziwe lub fałszywe oparty tylko na pierwszej wiadomości e-mail w ciągu, ale chcesz przetestować dla dowolnego adresu e-mail w ciągu.

Dziękujemy!

+0

Co zawiera wiele wiadomości e-mail? –

+0

'^' i '$' w regex powoduje, że pasuje do całego ciągu znaków. Zobacz http://www.regular-expressions.info/reference.html, aby dowiedzieć się więcej na temat wyrażeń regularnych. – Znarkus

+0

@Bartimeus Jest to wartość wpisu tekstowego ... w zasadzie ciąg z wiadomościami e-mail oddzielonymi przecinkiem lub średnikiem. –

Odpowiedz

9

Problemem jest twój blok if/else; Wracasz pod dwoma warunkami. Co oznacza, że ​​opuszcza funkcję po ocenie tylko jednego elementu.

Mam zmodyfikowany validateEmails wykazać co prawdopodobnie chcesz zrobić:

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

Jak to możliwe, że tego nie widziałem ... x) –

+0

@Mythril Dziękuję !!! –

+0

jak to naprawdę rozwiązuje twój problem? – Gustonez

1

znajdę najbardziej utrzymaniu sposobem jest użycie zmiennej do przechowywania wyjście powrotną.

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

co z tym?

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

Dziękuję za odpowiedź, świetne rozwiązanie! –

1

w przypadku korzystania z jquery-walidacji metody sprawdzania wyglądałby następująco:

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

Dokładnie to, czego potrzebowałem, mimo że użyłem innego wyrażenia RegEx, aby poprawić poprawiony nieprawidłowy adres e-mail: '' '/^(([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

Ten kod poniżej jest idealna do sprawdzania poprawności wiele adresów email oddzielonych przecinkiem lub średnikiem przy użyciu 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

Twoja odpowiedź nie odpowiada do specyficznego problemu PO. – dakab

Powiązane problemy