Ver Mensaje Individual
  #7 (permalink)  
Antiguo 03/07/2011, 15:10
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
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