Foros del Web » Programando para Internet » Javascript »

Expresión Regular

Estas en el tema de Expresión Regular en el foro de Javascript en Foros del Web. Hace horas que estoy con este problema y no se ya como resolverlo. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original min = 0 ; max ...
  #1 (permalink)  
Antiguo 23/11/2010, 10:39
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Expresión Regular

Hace horas que estoy con este problema y no se ya como resolverlo.

Código Javascript:
Ver original
  1. min = 0;
  2. max=30;
  3.  
  4. texto="abn";
  5.    
  6. var RegExPattern=/^[0-9A-Za-z_]{ " + t_min + " , " + t_max + "}$/i;
  7.  
  8.  
  9. alert(RegExPattern.test(texto)); // falso (cuando creo que es verdadero)

Esta misma expresión la uso en PHP y funciona bien. La uso de la siguiente manera

Código PHP:
Ver original
  1. $min = 0;
  2. $max=30;
  3.  
  4. $texto="abn";
  5.  
  6. if(preg_match("/^[0-9A-Za-z_]{" . $min . "," . $max. "}$/i", $texto)) {
  7.         $resultado =  true;
  8.     }else{
  9.         $resultado =  false;
  10.     }
  11.     return $resultado;


Desde ya muchas gracias gracias, espero haber hecho la pregunta en el lugar correcto.

Saludos
  #2 (permalink)  
Antiguo 23/11/2010, 11:00
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Expresión Regular

Prueba:
Código Javascript:
Ver original
  1. var RegExPattern = new RegExp("^[0-9A-Za-z_]{ " + min + "," + max + "}$", "i");
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 23/11/2010, 11:07
Avatar de dual3nigma
Colaborador
 
Fecha de Ingreso: febrero-2010
Ubicación: Ciudad de México
Mensajes: 295
Antigüedad: 14 años, 1 mes
Puntos: 122
Respuesta: Expresión Regular

Primero fijate bien y verás que no es lo mismo esto:
Código Javascript:
Ver original
  1. { " + t_min + " , " + t_max + "}
a esto:
Código PHP:
Ver original
  1. {" . $min . "," . $max. "}
Segundo en js tienes variables min y max pero estas usuando t_min y t_max, Tercero y mas importante en js tendrias que estar haciendo algo asi
Código Javascript:
Ver original
  1. RegExp('[0-9A-Za-z_]{'+min+','+max+'}', 'i').test('abn');
  #4 (permalink)  
Antiguo 23/11/2010, 11:24
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 9 meses
Puntos: 53
Respuesta: Expresión Regular

Recuerda que en JavaScript tienes dos maneras de realizar expresiones regulares:

1.- De manera literal
Código Javascript:
Ver original
  1. var regexp = /\d/i;

2.- Usando el constructor
Código Javascript:
Ver original
  1. var regexp = new RegExp("\d","i");

Ahora, si quieres meter variables dentro de la expresión tendrías que usar el cosntructor, ya que este acepta un string el cual puedes concatenarle variables, de la otra manera no es posible concatenarle cosas.

Saludos
  #5 (permalink)  
Antiguo 25/11/2010, 06:41
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión Regular

Hola, gracias a todos por las respuestas.

En realidad sigo sin poder hacer que funcione. Estoy empezando a pensar que js toma de forma diferente las expresiones regulares.
He probado con el constructor y sigue sin funcionar: probe concatenando las variables:

Código Javascript:
Ver original
  1. texto="abc";
  2.     t_min= 1;
  3.     t_max= 30;
  4.     var RegExPattern = new RegExp("[0-9A-Za-z_]{ " + t_min + " , " + t_max + "}","i");
  5.  
  6.     alert(RegExPattern.test(texto)); // falso sigue igual

y también usando el mínimo y máximo de caracteres en forma constante:

Código Javascript:
Ver original
  1. texto="abc";
  2.     t_min= 1;
  3.     t_max= 30;
  4.  
  5.     var RegExPattern = new RegExp("[0-9A-Za-z_]{1, 30}","i");
  6.     alert(RegExPattern.test(texto)); // falso sigue igual

En realidad da siempre falso, ponga lo que ponga.

si uso RegExp así:

Código Javascript:
Ver original
  1. ar RegExPattern = new RegExp("[0-9A-Za-z_]","i");
  2. alert(RegExPattern.test(texto));

en este caso si texto es un solo caracter alfanumérico da true si son mas de uno false

no se que pensar. tal vez el problema este en la forma de las expresines regulares.
  #6 (permalink)  
Antiguo 25/11/2010, 07:04
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

Cita:
no se que pensar. tal vez el problema este en la forma de las expresines regulares.
eventualmente es la forma final de la expresion. quizas a mi me parezca muy obvio pero ya es por costumbre. fijate como queda la expresion final. en el cuantificador tienes espacios los cuales confligen en el pareado.
Código:
/[0-9A-Za-z_]{ 1 , 30}/i
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 25/11/2010, 08:42
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 9 meses
Puntos: 53
Respuesta: Expresión Regular

Ademas de que deberías checar todo el string, de lo contrario no funcionará como deseas, la expresión debería quedar así:

Código Javascript:
Ver original
  1. var regexp = /^[\w]{1,30}$/i;
  2.  
  3. regexp.test("abc"); //true
  4. regexp.test("abc%+"); //false

Nota el simbolo ^ y $ en la expresión regular ;)

Saludos
  #8 (permalink)  
Antiguo 25/11/2010, 09:40
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión Regular

successful

Gracias por su interés, son esas pequeñas cosas que se aprenden rompiendose la cabeza....

Con el tema de los espacios que me dijo zerokilled empezo a funcionar mejor el código. pero Claro ponía cualquier caracter y me daba True. Cosa que se soluciono porque obviamente como acotó stock faltaba decir que esto tenía que cumplirse en toda la cadena (^ y $ inicio y fin).

Gracias a todos. Saludos
  #9 (permalink)  
Antiguo 25/11/2010, 09:54
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Expresión Regular

Posteo la solución, por si le sirve a alguien más:

Código Javascript:
Ver original
  1. texto="abc";
  2.    t_min= 1;
  3.    t_max= 30;
  4.  
  5.   var RegExPattern = new RegExp("^[0-9A-Za-z_ñÑ]{" + t_min + "," + t_max + "}$","i");

Tuve que agregar las ñ porque con A-Za-Z no las reconocía.

Etiquetas: 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

SíEste tema le ha gustado a 1 personas




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