Foros del Web » Programando para Internet » Javascript »

Expresion regular para separar cadena con comas y/o espacios

Estas en el tema de Expresion regular para separar cadena con comas y/o espacios en el foro de Javascript en Foros del Web. Hola estoy haciendo una funcion que me valide una caja de texto (varios emails) donde pueden ir uno o varios correos, separados por una coma ...
  #1 (permalink)  
Antiguo 16/11/2007, 13:54
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Expresion regular para separar cadena con comas y/o espacios

Hola estoy haciendo una funcion que me valide una caja de texto (varios emails) donde pueden ir uno o varios correos, separados por una coma y espacio, o solo un espacio y una coma, pero en ocasiones los usuarios no pondran espacios, solo la coma o solo el espacio, cual seria la expresion regular, seria algo asi?
Código PHP:
var ArrCad=Cad.split(",\*/\s*,\s*/,"
O como seria, lo necesito para pasar las cadenas a un arreglo e ir evaluando todas las direcciones que se encuentran una por una: ejemplo de datos de entrada validos serian:
  #2 (permalink)  
Antiguo 16/11/2007, 20:36
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Expresion regular para separar cadena con comas y/o espacios

Hola Sergestux.

No entiendo muy bien el código que has posteado... Normalmente una expresión regular no se escribe encerrada entre comillas, sino entre barras.

Creo que sería así: O coma+espacio, o coma, o espacio:
Código:
Cad.split(/(, )|,| /g);
Por lo menos lo he probado con esa cadena que has posteado y ha funcionado como debía funcionar...


Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 17/11/2007, 14:02
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Re: Expresion regular para separar cadena con comas y/o espacios

Gracias por responder, veras escribire mejor el codigo completo de la funcion que estoy utilizando:
Código PHP:
        function ValidarMail(FrmAccion)
        {
            var 
Frm=document.Frm
            
if (Frm.Para.textLength==|| Frm.Para.value.length==0)
            {
                
alert('Falta que escriba a quien se enviara la minuta');
                
Frm.Para.focus();
                return 
false;
            }
            else
            {
                
Mail=/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
                var 
Cad=Frm.Para.value    //Obtengo los correos del formulario ('[email protected][email protected],[email protected] [email protected]')
                
var ArrCad=Cad.split(/(, )|,| /g)    //Divido la cadena (por espacios y comas) en un arreglo
                //var ArrCad=Cad.split(" ")    //Divido la cadena (por espacios y comas) en un arreglo
                
var Tam=ArrCad.length;    //Para no llamar a la funcion en cada iteracion del ciclo
                
var Bandera=false
                
for (var Cont=0Cont TamCont++)
                {
                    if(!
Mail.test(ArrCad[Cont]))    //evaluo un correo con la expresion regular
                    
{
                        
alert('-' ArrCad[Cont] + '-No es un email valido')
                        
Bandera=true
                    
}
                }
                if(
Bandera)    //Si hubo al menos un email invalido
                
{
                    
Frm.Para.focus();
                    return 
false;    //no submit
                
}
            }
            
Frm.Accion.value='EnviarMail';
            
Frm.submit();    //Si llego hasta aca, entonces se puede enviar el formulario
            
return true;
        } 
Esto me arroja con 3 alerts con las siguientes leyendas (les puse los giones para saber que estoy evaluando):

-, - no es un email valido;
-- no es un email valido;
-- no es un email valido;

Se supone que estos 4mails ("[email protected], [email protected],[email protected] [email protected]") son validos, la expresion regular para validar mails la tome de aca mismo de las faq.
Gracias por responder

Última edición por Sergestux; 17/11/2007 a las 14:58
  #4 (permalink)  
Antiguo 17/11/2007, 21:30
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Expresion regular para separar cadena con comas y/o espacios

Hola de nuevo:

No has puesto XHTML, pero me he inventado uno para la ocasión. Te recomiendo nunca hacer submit de los formularios con javascript, es mejor utilizar la devolución true o false, y aplicar la función al evento onsubmit del formulario (más accesible).


Por otra parte, felicidades, es la primera vez que veo comportamientos diferentes para expresiones regulares en IE y en FF . Llevo tiempo trabajando con ellas y nunca me dieron dificultades, pensaba que el motor, aunque diferente, funcionaría de igual manera. Y de hecho ha cumplido hasta ahora.

Para IE el código que te puse al principio funciona, pero para firefox devuelve algo así (elementos separados con un pipe | ):
Que es lo que produce tu error. Hay un montón de elementos (incluso vacíos), y no he conseguido averiguar por qué


Lo he podido solucionar de ésta manera "tan sencilla" probando cosas:
Código:
var Cad='[email protected], [email protected],[email protected] [email protected]'    //Obtengo los correos del formulario ('[email protected], [email protected],[email protected] [email protected]')
var ArrCad=Cad.split(/[(, )(,)( )]+/)    //Divido la cadena (por espacios y comas) en un arreglo
document.write( Cad +"<br/>");
document.write( ArrCad.join("|") );
Fíjate que si quitamos el + de la expresión regular acabamos con su funcionalidad (únicamente en FF pasa ésto)



No sabría decirte cómo o por qué, pero el caso es que ésta es la expresión regular que te funcionara...


Un saludo, y si a alguien se le ocurre la explicación le agradeceré mucho que la postee, porque yo estoy
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 20/11/2007, 12:03
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Re: Expresion regular para separar cadena con comas y/o espacios

Muchas gracias por los consejos y el tiempo que te tomaste para encontrar la solucion, bueno antes que todo la ultima expresion funciono como yo queria.
El submit del formulario lo hago asi por que uso una imagen en vez de un boton del formulario para llamar a la funcion, de todos modos lo valido del otro lado (del lado del servidor) para que no haya mucha bronca, ademas como es una pagina corporativa se supone que solamente los empleados pueden ver esta pagina (de hecho solo una persona que supuestamente no sabe nada de programacion).
En cuanto al error si me ocurrio en firefox (Iceweasel por que uso debian aunque tengo el internet explorer emulado) lo usuarios estan informados que deben usar el firefox, por que el explorer nos ha dado muchos problemas, asi que optimizamos el sitio para firefox (a veces le hago pruebas simples en explorer).
Gracias nuevamente y pues hasta hoy conteste por que hubo puente por el aniversario de la revolucion aca en Mexico
  #6 (permalink)  
Antiguo 20/11/2007, 12:30
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Expresion regular para separar cadena con comas y/o espacios

Hola:

Respecto a utilizar firefox me parece muy bien, se supone que tendría que ser así siempre, aunque a veces se quedan cosas como esa que acabamos de descubrir, en general siempre responde mucho mejor.

Para utilizar una imagen como botón para enviar, te sugiero hacer una cosa así:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<
head>
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<
meta name="Author" content="derkeNuke" />
<
title>Página nueva</title>
<
style type="text/css">
#btnSubmit {
    
background-colortransparent;
    
bordernone;
    
padding:0margin:0;
    
width18px;
    
height18px;
    
cursorpointer;
}
</
style>
</
head>

<
body>


<
form onsubmit="return validador(this)">
    <
label for="elCampo1">Campo número 1: </label> <input type="text" name="campo1" id="elCampo1" /> <br/>
    <
label for="btnSubmit">Envia:</label>
    <
button type="submit" id="btnSubmit"><img src="http://www.forosdelweb.com/images/smilies/ojotes.gif" /></button>
</
form>




<
script type="text/javascript">
<!--

function 
validador(fr) {
    
alert("Se supone que ahora estoy validando.");
    return 
confirm("¿Envio el formulario?");
}

// -->
</script>

</body>
</html> 

Un poco más pulido podrías conseguir el efecto. Como mucho poner que cuando se haga click en la imagen se produzca el submit, pero hay que pensar en el javascript desactivado.



Un saludo y adelante con el proyecto
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 20/11/2007, 13:47
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Re: Expresion regular para separar cadena con comas y/o espacios

Gracias por todo, creo que al final si utilizare mejor la opcion de llamar a la funcion en el evento on submit y no en al darle click sobre la imagen.
Esto me pasa por no leerme antes un buen manual de html por que no habia usado estos tags label y button.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:45.