Aquí es AB solución etter que la superior para militares más una solución civil.
Militar
^(((([0-1][0-9])|(2[0-3])):?[0-5][0-9])|(24:?00))
Creo que la respuesta o en el más alto rating no es analizar correctamente los subconjuntos antes y después sin el conjunto adicional de paréntesis para agruparlos. Además, no estoy seguro de que \d
sea solo 0-9
en todas las iteraciones. Técnicamente incluye el especial [[:digit:]]
aunque nunca he tratado con ese problema anteriormente. De cualquier modo, esto debe proporcionar todo lo que incluye el crossover 2400/24: 00
Civil
^([0-9]|([1][0-2])):[0-5][0-9][[:space:]]?([ap][m]?|[AP][M]?)
Ésta es una versión civil agradable que permite la gama completa formateado como 24:30, 12: 30P, 12:30 p.m., 12: 30p, 12:30 p.m., 12:30 p.m., 12:30 p.m. o 12:30 p, pero requiere que los caracteres matutinos o pos meridianos sean el mismo caso si se incluyen ambos (no Am o pM)
Uso ambos en un poco de JavaScript para validar las cadenas de tiempo.
upvoted para dar ejemplos y contraejemplos. –