2012-08-24 12 views
5

que tienen estas dos funciones:Validar varios correos electrónicos con 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; 
     } 
    } 
} 

El problema es que cuando pruebo el correo electrónico como este if(!self.validateEmails(multipleEmails)) { consigo verdaderas o falsas basándose sólo en el primer correo electrónico en la cadena, pero desea probar cualquier correo electrónico en la cadena.

Gracias!

+0

¿Qué contiene varios correos electrónicos? –

+0

'^' y '$' en la expresión regular hace que coincida con toda la cadena. Consulte http://www.regular-expressions.info/reference.html para obtener más información sobre las expresiones regulares – Znarkus

+0

@Bartimeus Es el valor de una entrada de texto ... básicamente una cadena con correo electrónico separados por una coma o punto y coma. –

Respuesta

9

El problema es tu bloque if/else; Estás volviendo en ambas condiciones. Lo que significa que deja la función después de evaluar solo un elemento.

He modificado validateEmails para demostrar lo que es probable que desee hacer:

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

¿Cómo es posible que no lo haya visto ... x) –

+0

@Mythril Gracias !!! –

+0

¿cómo es esto realmente solucionó su problema? – Gustonez

1

que encontrar la manera más fácil de mantener es utilizar una variable para almacenar la salida de retorno.

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

¿qué tal esto?

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

Gracias por su respuesta, gran solución! –

1

en caso de que utilice jQuery-validar el método de validación se vería así:

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

Exactamente lo que necesitaba, aunque utilicé una expresión RegEx diferente para tener una cobertura de correo electrónico no válida mejorada: '' '/^(([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

Este código de abajo es perfecto para validar direcciones de correo electrónico separadas por comas o punto y coma usando 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

Tu respuesta no responde al problema específico de OP – dakab

Cuestiones relacionadas