Foros del Web » Programando para Internet » Javascript »

regex para validar correos separados por coma

Estas en el tema de regex para validar correos separados por coma en el foro de Javascript en Foros del Web. Amigos, a ver si me pueden ayudar con esto... estoy tratando de hacer una validación a través de expresiones regulares de correos separados por coma ...
  #1 (permalink)  
Antiguo 30/06/2011, 20:40
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años, 8 meses
Puntos: 1
regex para validar correos separados por coma

Amigos, a ver si me pueden ayudar con esto... estoy tratando de hacer una validación a través de expresiones regulares de correos separados por coma (,) o coma y espacio (, )... para lo cual he llegado a lo siguiente:

Código PHP:
/^((([A-Z0-9._%-])+@([A-Z0-9.-])+.([A-Z]){2,4})+(,s?b)?)+$/ 
si bien con esto puedo validar correctamente cosas como:
  1. [email protected] (correcto)
  2. [email protected],[email protected] (correcto)
  3. [email protected], [email protected] (correcto)
  4. [email protected] [email protected] (incorrecto)
  5. [email protected], [email protected], (incorrecto)
  6. [email protected]@dominio.com (correcto)

lo que me esta dando dolor de cabeza, es que el punto 6 me aparece como correcto!... y no es lo que necesito.

he estado probando la expresion regular en este sitio http://regexpal.com/

a ver si me pueden echar una mano con esto, gracias!
__________________
para que hacer las cosas faciles si se pueden complicar!
  #2 (permalink)  
Antiguo 02/07/2011, 19:07
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: regex para validar correos separados por coma

buenas,
no lo he intentado pero en teoría debería funcionar la siguiente metodología. debes tener una expresión en dos partes: la obligatoria y la opcional. la obligatoria es la expresión que debe evaluar al menos una dirección. la opcional, es la expresión que opcionalmente evaluará si el texto contiene más caracteres según lo indicado en la primera parte. básicamente ambas partes tendrán la misma expresión, lo que cambia es que al inicio de la segunda parte debes indicar los caracteres que funcionarán como separador de las direcciones y seguido nuevamente la expresión de la primera parte. de forma ilustrada quedaría más o menos como sigue:
Código:
/email(separador email)cuantificador/
el color rojo es la primera parte obligatoria que evalua al menos una dirección, y el color verde es la segunda parte que evalua la parte opcional del texto. es decir, si incluye más direcciones. notese que cada componente -email, separador, cuantificador- son expresiones regulares.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 02/07/2011, 20:23
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años, 8 meses
Puntos: 1
Respuesta: regex para validar correos separados por coma

Gracias zerokilled, creo que lo resolví con la ayuda que me diste.

^[a-z]+@[a-z]+\.[a-z]{2,4}((,\s?){1}[a-z]+@[a-z]+\.[a-z]{2,4})?$

(sin considerar que los correos tienes otros caracteres)
__________________
para que hacer las cosas faciles si se pueden complicar!
  #4 (permalink)  
Antiguo 02/07/2011, 20:32
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: regex para validar correos separados por coma

no se si es precisamente así como lo deseas, pero nótese que la expresión solo puede capturar hasta dos direcciones. si deseas capturar más de dos debes cambiar el cuantificador del paréntesis de la segunda parte.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 02/07/2011, 20:37
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años, 8 meses
Puntos: 1
Respuesta: regex para validar correos separados por coma

tienes toda la razon... cambié el ? por el *

gracias!
__________________
para que hacer las cosas faciles si se pueden complicar!
  #6 (permalink)  
Antiguo 03/07/2011, 14:00
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: regex para validar correos separados por coma

Mmmm... ¿No es más fácil hacer un split e ir validando uno por uno?
Código Javascript:
Ver original
  1. var comprobar = function(str){
  2.  var nuevostr = str.split(/, ?/g), ok = true;
  3.  nuevostr.forEach(function(act){ ok = emailRegExp.test(act); });
  4.  return ok;
  5. }
  6. comprobar(str); // false
Saludos (:
Edit: forEach no está implementado en todos los navegadores, pero era para no escribir el for entero
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 03/07/2011, 15:10
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: regex para validar correos separados por coma

que tal cronos!
fíjate que tu algoritmo tiene algo mal. ¿qué sucede si el último elemento del array es un email válido pero tiene uno inválido en los elementos anteriores? es decir, si la cadena fuera la siguiente.
nótese que en la función de forEach siempre estas guardando en la variable la evaluación del último elemento. si lo hubieras hecho con un for normal probablemente te hubieras dado cuenta. el problema de forEach es que a diferencia del resto de los bucles, este no se puede detener. en este caso sería más adecuado romper el ciclo y de inmediato indicar que la cadena no es válida. por tanto hay que agregar un algoritmo adicional para ese propósito. el que se me habia ocurrido para este caso particular era usando operadores bitwise de forma que si la evaluacion devuelve falso, el resto tambien lo seran.

Código:
var ok = true;
array.forEach(function(v){
ok &= regexp.test(v);
});
Boolean(ok);
no obstante, este método evlua todos los elementos, es decir no rompe el ciclo. la forma que encontre para romper el ciclo fue mediante excepciones y try/catch. por ejemplo...
Código:
function fn(){
try{
"asdfghjklqwertyuiopzxcvbnm".split('').forEach(function(v,k,a){
if(v == ';') throw new Error('Stop forEach iteration.');
});
} catch(e){
return false;
}
return true;
}

console.log(fn());
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 03/07/2011 a las 16:03 Razón: error en el codigo
  #8 (permalink)  
Antiguo 03/07/2011, 15:34
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: regex para validar correos separados por coma

@ZK, lo escribí rápido y se me olvidó poner "&& ok" al final
Lo de detener el bucle, ¿lo dices por algo en especial o es sólo para no tener que seguir una vez llegado a un resultado erróneo?
Saludos :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #9 (permalink)  
Antiguo 03/07/2011, 16:00
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: regex para validar correos separados por coma

Cita:
es sólo para no tener que seguir una vez llegado a un resultado erróneo
es correcto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 03/07/2011, 16:13
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años, 2 meses
Puntos: 122
Respuesta: regex para validar correos separados por coma

Ya que hablamos del tema de las expreciones regulares, muchas veces encuentro útil poder visulizar gráficamente lo que la regexp significa. Para eso uso esta app: http://strfriend.com/

Me ha sido muy útil. La última vez que agradecí su existencia fué para crear este bebé
Código RegExp:
Ver original
  1. /((?:\d*\s*\d+\/\d+)|(?:\d*\.?\d+))\s*($somevar)(?!\w)/
__________________
twitter: @imbuzu
  #11 (permalink)  
Antiguo 03/07/2011, 17:11
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: regex para validar correos separados por coma

muy bueno e interesante, buzu! me gusto mucho por su manera grafica de representar los posibles caminos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #12 (permalink)  
Antiguo 03/07/2011, 20:50
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años, 2 meses
Puntos: 122
Respuesta: regex para validar correos separados por coma

Es lo que amo de ese recurso. :D
__________________
twitter: @imbuzu

Etiquetas: coma, correos, regex
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.