Expresión regular para hacer coincidir el formato de hora HH:MM
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.
Su expresión regular original tiene fallas: no coincidiría, 04:00
por ejemplo.
Esto puede funcionar mejor:
^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$
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
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)