Expresión regular para hacer coincidir el formato de hora HH:MM

Resuelto Ali asked hace 12 años • 22 respuestas

Quiero una expresión regular para hacer coincidir la hora en formato HH:MM. Esto es lo que tengo y funciona:

^[0-2][0-3]:[0-5][0-9]$

Esto coincide con todo desde las 00:00 hasta las 23:59.

Sin embargo, quiero cambiarlo para que 0:00 y 1:00, etc. también coincidan, así como 00:00 y 01:30. Es decir, hacer que el dígito más a la izquierda sea opcional, para que coincida tanto con HH:MM como con H:MM.

¿Alguna idea de cómo hacer ese cambio? Necesito que esto funcione tanto en javascript como en php.

Ali avatar Sep 24 '11 10:09 Ali
Aceptado

Su expresión regular original tiene fallas: no coincidiría, 04:00por ejemplo.

Esto puede funcionar mejor:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$
Peter O. avatar Sep 24 '2011 03:09 Peter O.

Expresiones regulares para el tiempo

  • HH:MM Formato de 12 horas, 0 inicial opcional

    /^(0?[1-9]|1[0-2]):[0-5][0-9]$/
    
  • HH:MM Formato de 12 horas, 0 inicial opcional, meridiems obligatorios (AM/PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
    
  • HH:MM 24 horas con 0 inicial

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
    
  • HH:MM Formato de 24 horas, 0 inicial opcional

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
    
  • HH:MM:SS Formato de 24 horas con 0 inicial

    /(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)/
    

Referencia y demostración

Niket Pathak avatar Jul 04 '2018 16:07 Niket Pathak

Nada de lo anterior funcionó para mí. Al final usé:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$ (js engine)

Lógica:

El primer número (horas) es: un número entre 0 y 19 --> [0-1]?[0-9](permitiendo números de un solo dígito)
o
un número entre 20 - 23 -->2[0-3]

el segundo número (minutos) es siempre un número entre 00 y 59 --> [0-5][0-9](no se permite un solo dígito)

Tomer avatar Nov 21 '2013 14:11 Tomer