2011-11-29 27 views
28

Quiero analizar una cadena hh:mm:ss. Una simple es ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) que espera 2:3:24 o 02:03:24 cadena.Patrón Regex para HH: MM: cadena de tiempo SS

quiero ir un paso más allá y pasar la validación incluso en casos como

  1. si se introduce solo 56, hay que pasar, como 56 pueden ser considerados como 56 segundos [SS]
  2. si ingresa 2: 3 o 02:03 o 02: 3 o 2:03 debería pasar. 2 minutos y 3 segundos [MM: SS]
  3. Si ingresa 20:30:12 pase con 20 horas, 30 minutos y 12 segundos [HH: MM: SS]
  4. si ingresa 78:12, no lo haga pasar 78 minutos está mal ....

Básicamente, si uno ":" se encuentra, considere número antes de ":" como MM y el número después de ":" como SS . Si se encuentran dos ":", considere HH: MM: SS

Se me ocurrió este patrón.

(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$) 

Parece que funciona bien. Quería saber cualquier otra expresión regular más simple, que pueda hacer el trabajo.

+0

para sus necesidades, que se parece a un notable simple expresión regular –

Respuesta

92
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 

Explicación:

^     # Start of string 
(?:     # Try to match... 
(?:    # Try to match... 
    ([01]?\d|2[0-3]): # HH: 
)?     # (optionally). 
([0-5]?\d):  # MM: (required) 
)?     # (entire group optional, so either HH:MM:, MM: or nothing) 
([0-5]?\d)   # SS (required) 
$     # End of string 
+2

Muchas gracias. Esto es mucho más simple y genial.Quiero aprender Regex. Por favor, apúntame en la dirección correcta. ¿Cómo aprendo Regex? Todo lo que sé actualmente es sintaxis básica (tipo de material tutorial rápido) – user418836

+7

@ user418836: Visite www.regular-expressions.info –

+2

@ user418836 - ¿qué tal un voto a favor de Tim. –

4

@Tim Pietzcker cubre los requerimientos de la OP para un HH: MM: SS analizador donde SS era obligatorio, es decir,

  • HH: MM: SS
  • MM: SS
  • SS

Si me permiten apartarse de los requerimientos de la OP para un poco, y considerar un caso donde HH es obligatorio, es decir

  • HH
  • HH: MM
  • HH: MM: SS

La expresión regular que se me ocurrió fue:

^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$ 

Vamos a desglosarlo:

  • ([0-1]?\d|2[0-3]) - partidos por horas
  • (?::([0-5]?\d))? - partidos opcionalmente por minuto
  • (?::([0-5]?\d))? - partidos opcionalmente para el segundo
Cuestiones relacionadas