validate test regulares regular probar online expresiones expresion espacio ejemplos blanco alfanumerico regex expression hour seconds minute

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

  1. si ingresas solo 56, debería pasar, ya que 56 pueden considerarse 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 a las 20:30:12 pase con 20 horas, 30 minutos y 12 segundos [HH: MM: SS]
  4. 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