2012-06-12 10 views
8

Pozwalam użytkownikom wybrać godzinę od 00:00:00 do 23:00:00 i trzeba sprawdzić, czy przesyłają odpowiedni format. Czy istnieje wyrażenie regularne lub funkcja php, która sprawdza poprawność formatu 24-godzinnego, np. HH:MM:SS?Potwierdzanie przez Php formatu 24-godzinnego

Znalazłem kilka przykładów wyrażenia regularnego, ale 24-godzinny czas sprawdzania poprawności jest zawsze ustawiony na 00 dla minut i sekund. Zmienia się tylko godzina.

Na przykład

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

Użytkownicy mogą zmieniać dokonany wybór? np. przypisanie "25:00:00" lub "banan"? – Zuul

+0

Odpowiedź sachleen jest taka, o jaką prosiłeś, ale jeśli Twoim prawdziwym problemem jest zapewnienie użytkownikowi sposobu na wprowadzenie liczby pomiędzy 00 a 23, rozważ skorzystanie z rozwijanego menu. –

+0

@Zuul, czy mogą, wybierają czas z listy rozwijanej. – CyberJunkie

Odpowiedz

19

Dopasowuje czas 24 godzinny wraz z sekundami

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

Jeśli chcesz tylko 00 dla minut i sekund, a następnie

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

Dzięki! Twój kod pomoże wielu. – CyberJunkie

+0

Zapomniałem zapytać. Czy poniższe ograniczniki powinny być poprawne dla regex 2? '/^([01]? [0-9] | 2 [0-3]): 00: 00 $ /' – CyberJunkie

+2

'^' oznacza początek łańcucha i '$' koniec łańcucha. Więc z tymi w nim, nie może być nic wokół czasu. Więc tak, to nie tylko zadziała, ale jest słuszne. – sachleen

2

Try To

$time="23:00:00"; 

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

Działa jak urok! (uratowałem mój dzień). –

3

Tutaj jest gotowa do użycia próbka końcowa.

$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

Czy to jest REGEX? Możesz łatwo użyć PHP strtotime - funkcja do sprawdzania daty i godziny (działa również bez daty). strtotime zwraca false (-1 przed PHP 5.1), jeśli podany czas nie jest prawidłowy. Nie zapomnij więc użyć operandu ===!

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

To zadziałało jak dla mnie urok.

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