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

Expresión Para validar Hora

Estas en el tema de Expresión Para validar Hora en el foro de RegExp en Foros del Web. Buenas gente, Estoy intentando hacer una expresión regular que me valide el siguiente formato: "00:00:00" donde cero puede ser cualquier número. No soy muy conocedor ...
  #1 (permalink)  
Antiguo 18/04/2014, 08:17
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 9 meses
Puntos: 16
Expresión Para validar Hora

Buenas gente,

Estoy intentando hacer una expresión regular que me valide el siguiente formato:

"00:00:00" donde cero puede ser cualquier número. No soy muy conocedor de expresiones, así que gracias a quien pueda ayudarme:
Tengo lo siguiente:
Código BASH:
Ver original
  1. /^[0-9]{2}:{1}/
Alli solo valido el "00:" y va perfecto, el problema me da al intentar repetirlo tres veces, pense que podria ser asi:
Código BASH:
Ver original
  1. /^([0-9]{2}:{1})+/
Entendiendo que el "+" busca una o más repeticiones, y pensando que con los parentesis estaba agrupando, pero la expresión falla y no valida.

Tambien intente hacerlo asi:
Código BASH:
Ver original
  1. /^[0-9]{2}:{1}[0-9]{2}:{1}[0-9]{2}:{1}/

Pero de igual manera no funciona.

Gracias a quien se tome el tiempo de colaborarme.

Saludos.
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos
  #2 (permalink)  
Antiguo 21/04/2014, 14:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Expresión Para validar Hora

Piensa que si repites tres veces "[0-9]{2}:{1}" es como si pudieras validar "00:00:00:" lo cual está mal.

En cierta forma el {1} está de sobra, pues sólo toma en cuenta un carácter, lo cual es equivalente a si mismo sin necesidad de ningún cuantificador.

Así pues, la expresión sería "^[0-9]{2}:[0-9]{2}:[0-9]{2}$" aunque es una pérdida de tiempo porque sencillamente deben existir funciones o librerías especializadas para validar este tipo de datos.

¿Por qué digo esto?

Por que una cosa es validar el "formato" y otra muy distinta validar que se trate de un valor real.

Si usas RegExp podría validar "99:99:99" y claramente no es un valor real.

Si usas una librería para ello seguro tendrás mejores resultados.

La regla de oro de RegExp es simple: si lo puedes resolver sin usar RegExp entonces no uses RegExp.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 22/04/2014, 07:02
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Expresión Para validar Hora

A mí me llama la atención la mención a Bash. ¿En qué herramienta estás usando esto? es probable que no acepte tu expresión. Sed, por ejemplo, entiende + literalmente y no como cuantificador.

Busca alguna manera de hacer la validación con herramientas del sistema, tal y como te lo propone pateketrueke (hola! ). Por ejemplo, con AWK podrías hacer algo como

Código AWK:
Ver original
  1. awk -F: '/^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/ {
  2.     if ($1 < 99 && $2 < 60 && $3 < 60) {
  3.         print $0 " valido"
  4.     }
  5. }'
  #4 (permalink)  
Antiguo 22/04/2014, 07:35
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 9 meses
Puntos: 16
Respuesta: Expresión Para validar Hora

Cita:
Iniciado por pateketrueke Ver Mensaje
Piensa que si repites tres veces "[0-9]{2}:{1}" es como si pudieras validar "00:00:00:" lo cual está mal.

En cierta forma el {1} está de sobra, pues sólo toma en cuenta un carácter, lo cual es equivalente a si mismo sin necesidad de ningún cuantificador.

Así pues, la expresión sería "^[0-9]{2}:[0-9]{2}:[0-9]{2}$" aunque es una pérdida de tiempo porque sencillamente deben existir funciones o librerías especializadas para validar este tipo de datos.

¿Por qué digo esto?

Por que una cosa es validar el "formato" y otra muy distinta validar que se trate de un valor real.

Si usas RegExp podría validar "99:99:99" y claramente no es un valor real.

Si usas una librería para ello seguro tendrás mejores resultados.

La regla de oro de RegExp es simple: si lo puedes resolver sin usar RegExp entonces no uses RegExp.

Hola, gracias por responder. voy a probar la expresión y les comento si funciono y cierro el tema. Con respecto a lo de que es una perdida de tiempo, no lo es, lo que pasa es que no es especificamente para validar un campo. El uso de la expresión es para un plugin javascript que hice que me sirve de mascara y lo hago con expresiones. (para formatos de rif,cedulas,fecha o lo que sea). Más que para validar el campo es para limitar al usuario a q solo pueda escribir eso.

Cita:
alvaroG
puse lo del bash de repente por error, la idea era usar el highlight.


Igualmente muchas gracias a ambos.
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos

Etiquetas: Ninguno
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:20.