Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Expresion regular Comportamiento incomprensible

Estas en el tema de Expresion regular Comportamiento incomprensible en el foro de Javascript en Foros del Web. Hola. Cuando programo la parte del cliente hago las validaciones con Expresiones Regulares, siempre pude resolverlo hasta que me tope con algo que parece demasiado ...
  #1 (permalink)  
Antiguo 22/05/2015, 12:15
 
Fecha de Ingreso: mayo-2015
Ubicación: Wilde
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Expresion regular Comportamiento incomprensible

Hola.

Cuando programo la parte del cliente hago las validaciones con Expresiones Regulares, siempre pude resolverlo hasta que me tope con algo que parece demasiado simple pero no pude resolverlo

Resulta que tengo que validar que un campo para que solo se pueda ingresar números del 0 al 15, me parece simple y escribo:

/^[0-9]|1[0-5]$/

y no funciona!!! Pruebo y vuelvo a probar y no funciona!!! Busco en el foro y encuentro:

/^2[5-9]|[3-6]\d|7[0-5]$/
(http://www.forosdelweb.com/f13/rango-numeros-con-expresion-regular-934554/)

que valida un rango de 25 a 75 y funciona correctamente, entonces pruebo algo super básico:

/^1|2$/ (Valida que el campo sea solo 1 ó 2) y no funciona!!!

pero si lo escribo asi:

/^(1|2)$/

Sí funciona!!! Ahora casi que se a vuelto personal, y sigo intentando y llego a esto:

/^2[0-5]|15$/ (Valida de 20 a 25 ó 15) y funciona perfectamente.

/^[0-5]|15$/ (Valida de 0 a 5 ó 15) y no funciona!!!!

Aparentemente el problema surge cuando empiezo con la opción de rango [] , si empiezo con una constante como por ejemplo 2 todo anda bien.

Alguien sabe que pasa?

También descubrí que si escribo /^[1-7]$/ (valida el rango del 1 al 7) y funciona correctamente pero si escribo /^[1-7]|15$/ ya no funciona. Aparentemente el problemas es si se combina "[]" al principio y "|"

PD:

Uso firefox y firebug para probar
  #2 (permalink)  
Antiguo 22/05/2015, 12:36
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Expresion regular Comportamiento incomprensible

Pues un problema con una solución extraordinariamente sencilla

Código:
/^([0-9]|1[0-5])$/
Para que los marcadores de principio (^) y final ($) funcionen en un OR, debes agruparlo todo, si no tomará a cada subexpresión de forma individual.


PD: Los rangos numéricos no se suelen validar con RegExp porque para eso está el lenguaje

Última edición por PHPeros; 22/05/2015 a las 12:43
  #3 (permalink)  
Antiguo 22/05/2015, 13:31
 
Fecha de Ingreso: mayo-2015
Ubicación: Wilde
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Expresion regular Comportamiento incomprensible

Mira, intente de todo menos agrupar todo con unos paracentesis :(

cuando decis:

"Los rangos numéricos no se suelen validar con RegExp porque para eso está el lenguaje"

Estas sugiriendo que la validacion lo haga del lado del servidor?

Pasa que usando ERs puedo validar el campo en pocas lineas, de lo contrario tengo que verificar primero si es numérico y luego si esta en el rango correcto(todo esto con JS del lado del cliente). La idea es hacer todas las validaciones posibles del lado del cliente.
  #4 (permalink)  
Antiguo 22/05/2015, 13:47
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Expresion regular Comportamiento incomprensible

Da igual, aunque lo valides en el cliente también lo tendrás que hacer en el servidor. A lo que me refería es que también puedes compararlo numéricamente.
  #5 (permalink)  
Antiguo 22/05/2015, 17:25
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Expresion regular Comportamiento incomprensible

Supongo que PHPeros se refiere a algo así para validar:

Código Javascript:
Ver original
  1. var valorInput = '12'
  2.  
  3. if (inIntegerRange(valorInput, 0, 15) {
  4.      console.log('válido!')
  5. } else {
  6.     console.log('inválido')
  7. }
  8.  
  9. function inIntegerRange(num, a, b) {
  10.     var num = toInteger(num)
  11.     return num !== false && num >= a && num <= b
  12. }
  13.  
  14. function toInteger(str) {
  15.     var num = parseInt(str)
  16.     return num == str ? num : false
  17. }

A priori quizá es un código más largo, pero a la larga este código acaba siendo más reaprovechable que el uso de expresiones regulares en muchos casos de validaciones. Imagina que el cliente quiere cambiar ahora el rango de valores para que sea de 1 a 26. Es más fácil cambiar el código que propongo que tener que pensar una nueva expresión regular cada vez que el cliente decida cambiar los valores válidos.

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 22/05/2015 a las 17:31
  #6 (permalink)  
Antiguo 25/05/2015, 10:19
 
Fecha de Ingreso: mayo-2015
Ubicación: Wilde
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Expresion regular Comportamiento incomprensible

Bien, es verdad, visto de esa forma no es conveniente validar absolutamente todo con ER.

Muchas gracias por su ayuda, definitivamente gracias a uds aprendí un poco mas, gracias de verdad.

Saludos.

Etiquetas: comportamiento, expresion, funcion, 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 13:23.