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

Quiero una expresión regular para el tiempo de coincidencia 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 coincidan 0:00 y 1:00, etc., así como 00:00 y 01:30. Es decir, hacer que el dígito más a la izquierda sea opcional, para que coincida con HH: MM y 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 defectos: por ejemplo, no coincidiría con 04:00 .

Esto puede funcionar mejor:

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

Ninguno de los anteriores 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 el número de un solo dígito)
o
un número entre 20 – 23 -> 2[0-3]

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

Lo mejor sería para HH: MM sin tomar ningún riesgo.

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

Puedes usar este 24H, los segundos son opcionales

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

Sorprendentemente encontré que realmente todos estos no cubren completamente, ya que no funcionan para la medianoche de formato más corto de 0: 0 y algunos tampoco funcionan para las 00:00. Usé y probé lo siguiente:

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

Puedes usar esta expresión regular:

 ^(2[0-3]|[01]?[0-9]):([1-5]{1}[0-9])$ 

Si quiere excluir 00:00, puede usar esta expresión

 ^(2[0-3]|[01]?[0-9]):(0[1-9]{1}|[1-5]{1}[0-9])$ 

La segunda expresión es la mejor opción porque el tiempo válido es de 00:01 a 00:59 o de 0:01 a 23:59. Puede usar cualquiera de estos según sus requisitos. Enlace Regex101

Puede usar la siguiente expresión regular:

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

Declarar

 private static final String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]"; public boolean validate(final String time) { pattern = Pattern.compile(TIME24HOURS_PATTERN); matcher = pattern.matcher(time); return matcher.matches(); } 

Este método devuelve “true” cuando String coincide con la expresión regular.

Partidos:

 2: 9
 2:09
 2:59
 02: 9
 02:09
 02:59
 23:59

Úselo:

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

Como usted pidió la opción más a la izquierda, he hecho más a la izquierda y la más a la derecha también es opcional, échele un vistazo

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

Combina con

 0:0 00:00 00:0 0:00 23:59 01:00 00:59 

El enlace en vivo está disponible aquí

Una pequeña modificación a la contribución de Manish M Demblani sobre las manecillas 4am (me deshice de la sección de segundos ya que no la necesito en mi aplicación)

 ^(([0-1]{0,1}[0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]))$ 

asas: 4 a.m. 4 a.m. 4:00 a.m. 4 a.m. a 4. a.m. a 4. a.m., etc.

La expresión regular a continuación ayudará a validar el formato hh: mm

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

Expresiones regulares por tiempo

  • HH: Formato MM de 12 horas, opcional Líder 0

     /^(0?[1-9]|1[0-2]):[0-5][0-9]$/ 
  • HH: formato MM de 12 horas, opcionalmente líder 0, Meridiems obligatorios (AM / PM)

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

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

     /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/ 
  • HH: MM: SS formato de 24 horas con el líder 0

      /(?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d)/ 

Referencia y demostración

El mio es:

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

Esto es mucho más corto

Lo tengo probado con varios ejemplos

Partido:

  • 00:00
  • 7:43
  • 07:43
  • 19:00
  • 18:23

Y no coincide con ninguna instancia no válida como 25:76, etc.

Puedes probar lo siguiente

 ^\d{1,2}([:.]?\d{1,2})?([ ]?[a|p]m)?$ 

Puede detectar los siguientes patrones:

 2300 23:00 4 am 4am 4pm 4 pm 04:30pm 04:30 pm 4:30pm 4:30 pm 04.30pm 04.30 pm 4.30pm 4.30 pm 23:59 0000 00:00 

verifique esta expresión maestra del detector de marca de tiempo maestro que construí para buscar una marca de tiempo especificada por el usuario, ejemplos de lo que incluirá, pero definitivamente NO se limita a;

 8:30-9:40 09:40-09 : 50 09 : 40-09 : 50 09:40 - 09 : 50 08:00to05:00 08 : 00to05 : 00 08:00 to 05:00 8am-09pm 08h00 till 17h00 8pm-5am 08h00,21h00 06pm untill 9am 

También captará muchos más, siempre que los tiempos incluyan dígitos

Puede usar la siguiente expresión regular:

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

Solo la modificación que he hecho es el dígito más a la izquierda es opcional. El rest de la expresión regular es el mismo.

Pruebe lo siguiente

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

Nota: estaba asumiendo el motor javascript regex. Si es diferente, por favor avíseme.