2012-06-12 11 views
8

Permito que los usuarios elijan una hora de 00:00:00 a 23:00:00 y necesito comprobar si presentan el formato correcto. ¿Hay una expresión regular o función php que valide un formato de 24 horas, p. HH:MM:SS?Php validating formato de hora de 24 horas

Encontré algunos ejemplos de expresiones regulares, pero el tiempo de 24 horas que estoy validando siempre se establece en 00 por minutos y segundos. Solo la hora varía.

Por ejemplo

18:00:00, 23:00:00, 01:00:00 
+0

Los usuarios pueden modificar la selección que hicieron? por ejemplo, imputar "25:00:00" o "plátano"? – Zuul

+0

La respuesta de Sachleen es lo que ha pedido, pero si su problema real es proporcionarle al usuario una forma de ingresar un número entre 00 y 23, considere usar un menú desplegable. –

+0

@Zuul seguro que sí, están seleccionando la hora de una lista desplegable – CyberJunkie

Respuesta

19

Esto coincide con tiempo de 24 horas que incluye segundos

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

si solo deseas 00 para los minutos y segundos, luego

([01]?[0-9]|2[0-3]):00:00 
+0

¡Gracias! Tu código ayudará a muchos. – CyberJunkie

+0

Olvidé preguntar ... ¿serían los siguientes delimitadores correctos para regex 2? '/^([01]? [0-9] | 2 [0-3]): 00: 00 $ /' – CyberJunkie

+2

El '^' significa inicio de cadena y '$' final de cadena. Entonces, con los que están dentro, no puede haber nada en el tiempo. Entonces sí, eso no solo funcionará, es lo correcto. – sachleen

2

Trate Esta

$time="23:00:00"; 

preg_match('#^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', $time); 
+0

¡Funciona como un encanto! (salvó mi día). –

3

Aquí hay una muestra final que está lista para ser utilizada.

$myTime = '23:00:00'; 

$time = preg_match('#^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', $myTime); 

if ($time == 1) 
{ 
    // make a error! 
} 
else 
{ 
    // make a error! 
} 
1

Tiene que ser un RegEx? Puede usar fácilmente PHPs strtotime -función para validar fechas y horas (también funciona sin una fecha). strtotime devuelve false (-1 antes de PHP 5.1) si el tiempo indicado no es válido. ¡No olvide utilizar el operando === por lo tanto!

if (strtotime("12:13") === false) { echo("Wrong Time!"); } // Echos nothing 
if (strtotime("19:45") === false) { echo("Wrong Time!"); } // Echos nothing 
if (strtotime("17:62") === false) { echo("Wrong Time!"); } // Echos 'Wrong Time!' 
0

Esto funcionó como un encanto para mí.

$time = "23:59:60";  
preg_match("/^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $time) 
Cuestiones relacionadas