Foros del Web » Programación para mayores de 30 ;) » RegExp »

Expresión regular con RegExp

Estas en el tema de Expresión regular con RegExp en el foro de RegExp en Foros del Web. No puedo hacer funcionar esta función. Siempre me devuelve false @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original function filtrar_Num ( text , t_min , t_max ...
  #1 (permalink)  
Antiguo 10/06/2011, 07:24
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Expresión regular con RegExp

No puedo hacer funcionar esta función. Siempre me devuelve false

Código Javascript:
Ver original
  1. function filtrar_Num(text, t_min, t_max){
  2. //devuelve verdadero si solo hay digitos del 0-9 sino falso
  3. //y la cantidad de caracteres debe estar entre $min y $max
  4.     texto=text.value;
  5.     var RegExPattern = new RegExp("^[0-9]{" + t_min + "," + t_max + "}$","i");
  6.    
  7.     if(RegExPattern.test(texto)) {
  8.         resultado =  true;
  9.     }else{
  10.         resultado =  false;
  11.     }
  12.     return resultado;
  13. }

si lo hago de esta otra manera si funciona pero yo quiero hacer variable la cantidad de caracteres

Código Javascript:
Ver original
  1. function filtrar_Num(text, t_min, t_max){
  2. //devuelve verdadero si solo hay digitos del 0-9 sino falso
  3. //y la cantidad de caracteres debe estar entre $min y $max
  4.     texto=text.value;
  5.  
  6.     var RegExPattern = /^[0-9]{1,2}$/;
  7.    
  8.     if(RegExPattern.test(texto)) {
  9.         resultado =  true;
  10.     }else{
  11.         resultado =  false;
  12.     }
  13.     return resultado;
  14. }

Seguramente sea un error conseptual porque tampoco me funciona la que utilizaría para campos alfa-numéricos

Código Javascript:
Ver original
  1. var RegExPattern = new RegExp("^[0-9A-Za-z_ -áéíóúÁÉÍÓÚñÑ]{" + t_min + "," + t_max + "}$","i");

Desde ya muchas gracias por la ayuda. Saludos
  #2 (permalink)  
Antiguo 10/06/2011, 09:36
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
Puntos: 1485
Respuesta: Expresión regular con RegExp

buenas,
no veo ningun error en el codigo. comprueba el codigo con la consola de error. como mucho lo que puedo pensar es que el problema debe estar en el momento que lo invocas, quizas algun parametro incorrecto. por cierto, la estructura if la puedes remover y simplemente devolver el valor que devuelve el metodo test.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 10/06/2011, 10:26
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 18 años, 5 meses
Puntos: 87
Respuesta: Expresión regular con RegExp

Código Javascript:
Ver original
  1. var RegExPattern = new RegExp("^[0-9]{" + t_min + "," + t_max + "}$","i");
Hice la prueba y si funciona bien; probablemente debe haber algo mal pasandole las variables a la funcion.
  #4 (permalink)  
Antiguo 10/06/2011, 10:28
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión regular con RegExp

Si tenías razón...

Si hago la llamada a la función así No funciona:

Código Javascript:
Ver original
  1. filtrar_Num(text_PrecioDec , 1, 2)

Y así si funciona:
Código Javascript:
Ver original
  1. filtrar_Num(text_PrecioDec ,"1","2")

Me parece raro, porque los cambios de tipo de variables son automáticos no??
  #5 (permalink)  
Antiguo 10/06/2011, 10:30
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
Puntos: 1485
Respuesta: Expresión regular con RegExp

pues bien raro lo tuyo porque la prueba la habia hecho con integer. y si, la conversion de integer a string se supone que es automatica.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 10/06/2011, 10:41
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión regular con RegExp

Aparentemente el problema está en el espacio antes de los parámetros

así funciona:
Código Javascript:
Ver original
  1. filtrar_Num(text_PrecioDec ,1 ,2 )

así no:
Código Javascript:
Ver original
  1. filtrar_Num(text_PrecioDec , 1, 2)

PD: Ya saque el if inutil ese.... Gracias a ambos

Saludos
  #7 (permalink)  
Antiguo 10/06/2011, 10:55
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
Puntos: 1485
Respuesta: Expresión regular con RegExp

el espacio para argumentar los parametros no se toma en consideracion. es decir, javascript no lo utiliza como parte del contenido del argumento. por tanto cualquiera de los siguientes son validos:

Código:
function fn(){
console.log(arguments);
}
// white-space
fn(1, 2, 3);

// new line
fn(1,
2,
3);

// white-space alternados
fn(    1     ,  2,     // aqui detras hay espacios
    3);
ahora, distinto es si esos espacio son parte del valor del argumento, especificamente en los string:
Código:
fn("  1",    " 2   ", "\n\
3");
repito, ya que no has confirmado si has inspeccionado la consola, revisa si la consola genera algun reporte.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 10/06/2011, 11:37
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión regular con RegExp

Básicamente... ahora no quiere dejar de funcionar. Y no puedo probar con la consola. Vuelvo a poner todo como antes (salvo aquel if que no cumplia función alguna) y funciona todo bien.

Lo que si te puedo decir es que en DW no me daba errores de sintaxis. Chorme debe tener la consola desactivada por defecto.. porque nunca vi un mensaje de error.

Te dejo el código que funciona ahora para que veas que no hay ninguna modificación con el que no funcionaba, salvo el if.

Código Javascript:
Ver original
  1. text_PrecioDec=document.getElementById('text_precioDec');
  2.  
  3.     if (filtrar_Num(text_PrecioDec , 1, 2)){
  4.         text_PrecioDec.className="text_dec";
  5.     } else {
  6.         DatosCorrectos=false;
  7.        
  8.         text_PrecioDec.className="text_dec_err";
  9.        
  10.     }
  11.  
  12. function filtrar_Num(text, t_min, t_max){
  13. //devuelve verdadero si solo hay digitos del 0-9 sino falso
  14. //y la cantidad de caracteres debe estar entre $min y $max
  15.     texto=text.value;
  16.     var RegExPattern = new RegExp("^[0-9]{" + t_min + "," + t_max + "}$","i");
  17.    
  18.     return RegExPattern.test(texto);
  19. }

Es muy raro.. además yo esta función ya la usaba anteriormente en otro sector y funcionaba bien. Pero ahora no funciona. En ese otro sector. Las llamadas son iguales no se es muy raro....

edito: el problema en el otro lado no es igual.. es un error en la expresión regular que me controla solo el máximo y el mínimo pero me acepta cualquier caracter:

Código Javascript:
Ver original
  1. var RegExPattern = new RegExp("^[0-9A-Za-z_ -áéíóúÁÉÍÓÚñÑ]{" + t_min + "," + t_max + "}$","i");

por ejemplo si pongo &%###" me retorna true

Última edición por francap; 10/06/2011 a las 11:50
  #9 (permalink)  
Antiguo 10/06/2011, 12:06
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
Puntos: 1485
Respuesta: Expresión regular con RegExp

fijate en este montaje usando el script para validar solo numeros. notese que a grandes rasgos no he hecho ningun cambio... http://jsfiddle.net/PmrPS/4/. para obtener la consola en chrome, debes ir al menu principal (la llave), herramientas, y consola javascript. en firefox, puedes el que viene con el pero te limita a ver solo los reportes; menu herramienta, consola de error. si instalas el addons firebug, obtienes mejores posibilidades para depurar.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 12/06/2011, 06:06
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión regular con RegExp

Ese sitio es excelentemente para depurar errores...
Ya lo agregue a favoritos. Voy a investigar como funciona y lo voy a usar para depurar la expresión regular alfa num que no funciona. Creo que porque no he escapado el caracter - y el espacio.


Nunca había usado self.onload para cargar los eventos. Y no encontré algo claro que hable del objeto self si sabes de algún documento donde pueda leer al respecto me gustaría verlo.

La verdad que la forma conque resuelves el js, si bien hace exactamente lo mismo. Se ve como más simple. Está bueno.

Te reitero las gracias por la ayuda.

Saludos
  #11 (permalink)  
Antiguo 12/06/2011, 06:38
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión regular con RegExp

Bueno pude usar la web.. excelente. lo que no pude hacer es guardar lo que hice para compartirlo.

Pero igual dejo la solución

original que no funcionaba
Código Javascript:
Ver original
  1. RegExPattern = new RegExp("^[0-9A-Za-z_ -áéíóúÁÉÍÓÚñÑ]{" + t_min + "," + t_max + "}$","i");


El problema estaba en la forma de escapar el guión que debe hacerce al principio. de la siguiente forma.

Código Javascript:
Ver original
  1. [HIGHLIGHT="Javascript"]RegExPattern = new RegExp("^[-0-9A-Za-z_ áéíóúÁÉÍÓÚñÑ]{" + t_min + "," + t_max + "}$","i");
[/HIGHLIGHT]

Saludos
  #12 (permalink)  
Antiguo 12/06/2011, 06:41
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Expresión regular con RegExp

Cita:
Iniciado por zerokilled
. para obtener la consola en chrome, debes ir al menu principal (la llave), herramientas, y consola javascript. en firefox, puedes el que viene con el pero te limita a ver solo los reportes; menu herramienta, consola de error. si instalas el addons firebug, obtienes mejores posibilidades para depurar.
@francap: Por si quieres los atajos, en Chrome es Ctrl + Shift + J, en FF Ctrl + Shift + K, en IE y Firebug F12, y en Opera hay que hacer click derecho > Inspeccionar elemento y arriba a la derecha hay un botón ">_" que dice "Alternar consola".
Sin embargo, de todas estas yo me quedo con la del Chrome, no sé si es la mejor o no, pero es la que tiene la interfaz más agradable.
Además Firebug usa eval y a mí (no sé a los demás) me marca muchos errores propios de la acción de Firebug al analizar código, y no veo los errores que me marca a mí.
Saludos (:
__________________
" 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
  #13 (permalink)  
Antiguo 12/06/2011, 08:21
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión regular con RegExp

Gracias Cronos....

No me gusta que no me salgan las cosas... así que intento hasta que sale.....
Acá va resuelto el tema de la expresión regular: http://www.jsfiddle.net/francap/NnErB/
  #14 (permalink)  
Antiguo 12/06/2011, 08:52
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
Puntos: 1485
Respuesta: Expresión regular con RegExp

@francap,
es recomendable que en la expresion escapes los caracteres que tienen un significado particular para la sintaxis de la expresion. por ejemplo, el guion dentro de los corchetes se utiliza para designar un rango de caracteres, asi como de la a la z se designa como a-z. cuando tu quieras usar un caracter que forma parte de la sintaxis, simplemente lo escapa ubicandole antes del caracter un backslash (\). por ejemplo, /[a-z\-]/. sin embargo, en tu caso la expresion se crea dinamicamente a traves de un string. en ese caso debes colocar dos backslash seguido para que el string lo reconozca como uno. recuerda que en los string el backslash tambien se utiliza para representar algunos caracteres.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 13/06/2011, 06:34
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
De acuerdo Respuesta: Expresión regular con RegExp

A por eso no me escapaba el guión...

Había probado varias veces haciendolo así
Código Javascript:
Ver original
  1. [0-9A-Za-z_\ -áéíóúÁÉÍÓÚñÑ]
y no funcionaba.

Solo funcionó cuando lo hice así
Código Javascript:
Ver original
  1. [-0-9A-Za-z_\áéíóúÁÉÍÓÚñÑ]

Lo probé y funciona bien de bien así
Código Javascript:
Ver original
  1. [0-9A-Za-z_\\ -áéíóúÁÉÍÓÚñÑ]

Excelente zerokilled.

Yo puedo darte karma? No encontré en el foro la explicación al sistema.
  #16 (permalink)  
Antiguo 13/06/2011, 08:01
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Expresión regular con RegExp

Cita:
Iniciado por francap
Yo puedo darte karma? No encontré en el foro la explicación al sistema.
En la parte de abajo del post, haces click en me gustó en "Me gustó, ¡gracias!". Adicionalmente puedes añadir un comentario.
Saludos (:
__________________
" 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

Etiquetas: javascript, regular
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 10:39.