2012-06-12 12 views
8

Permetto agli utenti di selezionare un'ora da 00:00:00 a 23:00:00 e verificare se presentano il formato corretto. Esiste un'espressione regolare o una funzione PHP che convalida un formato di 24 ore, ad es. HH:MM:SS?Formato di convalida del formato di php 24 ore

Ho trovato alcuni esempi di regex ma la 24 ore di tempo che sto convalidando è sempre impostata su 00 per minuti e secondi. Solo l'ora varia.

Per esempio

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

Gli utenti possono modificare la selezione effettuata? ad es., "25:00:00" o "banana"? – Zuul

+0

La risposta di sachleen è ciò che hai chiesto, ma se il tuo vero problema è fornire a un utente un modo per inserire un numero compreso tra 00 e 23, considera l'utilizzo di un menu a discesa. –

+0

@Zuul sicuro che possono, stanno selezionando l'ora da un elenco a discesa – CyberJunkie

risposta

19

Questo corrisponde a 24 ore di tempo compreso secondi

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

se desideri solo 00 per i minuti ei secondi, quindi

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

Grazie! Il tuo codice aiuterà molti. – CyberJunkie

+0

Ho dimenticato di chiedere ... i seguenti delimitatori dovrebbero essere corretti per l'espressione regolare 2? '/^([01]? [0-9] | 2 [0-3]): 00: 00 $ /' – CyberJunkie

+2

Il '^' significa inizio della stringa e '$' fine della stringa. Quindi con quelli in esso, non ci può essere nulla che circonda il tempo. Quindi sì, non funzionerà solo, è la cosa giusta da fare. – sachleen

2

Try This

$time="23:00:00"; 

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

Funziona come un incantesimo! (ho salvato la mia giornata). –

3

Qui è un campione finale pronto per essere utilizzato.

$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

Dev'essere una RegEx? È possibile utilizzare facilmente la funzione strtotime di PHP per convalidare date e orari (funziona anche senza una data). strtotime restituisce false (-1 prima di PHP 5.1) se l'ora indicata non è valida. Non dimenticare di usare l'operando === quindi!

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

Questo ha funzionato come un fascino per me.

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