test - regex online c#
PatrĂ³n Regex para HH: MM: cadena de tiempo SS (2)
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.
Quiero dar un paso más y aprobar la validación incluso en casos como
- si ingresas solo 56, debería pasar, ya que 56 pueden considerarse 56 segundos [SS]
- si ingresa 2: 3 o 02:03 o 02: 3 o 2:03 debería pasar. 2 minutos y 3 segundos [MM: SS]
- Si ingresa a las 20:30:12 pase con 20 horas, 30 minutos y 12 segundos [HH: MM: SS]
- si ingresas 78:12, no pases 78 minutos, está mal ...
Básicamente, si se encuentra un ":", considere el 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 estar funcionando bien. Quería saber cualquier otra expresión regular más simple, que pueda hacer el trabajo.
@Tim Pietzcker cubre los requisitos de OP para un analizador HH: MM: SS donde SS era obligatorio, es decir,
- HH: MM: SS
- MM: SS
- SS
Si me permite desviarme por un tiempo de los requisitos del OP, y considerar un caso donde HH es obligatorio, es decir,
- S.S
- 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 descomponerlo:
-
([0-1]?/d|2[0-3])
- partidos por horas -
(?::([0-5]?/d))?
- opcionalmente coincide por minutos -
(?::([0-5]?/d))?
- opcionalmente coincide por segundos
^(?:(?:([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