I want to validate a time with a regex. I created the following expression :
'#^([01][0-9])|(2[0-4])(:[0-5][0-9]){1,2}$#'
Here is the problem:
<?php
var_dump(preg_match('#^([01][0-9])|(2[0-4])(:[0-5][0-9]){1,2}$#', '14:25'));
// Returns 1 (OK)
var_dump(preg_match('#^([01][0-9])|(2[0-4])(:[0-5][0-9]){1,2}$#', '25:25'));
// Returns 0 (OK)
var_dump(preg_match('#^([01][0-9])|(2[0-4])(:[0-5][0-9]){1,2}$#', '14:2555'));
// Returns 1 (instead of 0 as I would like to get)
?>
Does anybody know what is wrong?
On a 24-hour clock, if the first digit is 0 or 1, the second digit allows all 10 digits, but if the first digit is 2, the second digit must be between 0 and 3. In regex syntax, this can be expressed as ‹ 2[0-3]|[01]?[0-9] ›. Again, the question mark allows the first 10 hours to be written with a single digit.
The Validation (Regex) property helps you define a set of validation options for a given field. In general, this field property is used to perform validation checks (format, length, etc.) on the value that the user enters in a field. If the user enters a value that does not pass these checks, it will throw an error.
Time in 24-Hour format regular expression pattern :
([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?
The 24-hour clock format is start from 0-23 or 00-23 then a semi colon (:) and follow by 00-59 then (optionally a semi colon (:) and follow by 00-59).
Description :
( # start of group #1
[01]?[0-9] # start with 0-9,1-9,00-09,10-19
| # or
2[0-3] # start with 20-23
) # end of group #1
: # follow by a semi colon (:)
[0-5][0-9] # follow by 0..5 and 0..9, which means 00 to 59
( # start of group #2
: # follow by a semi colon (:)
[0-5][0-9] # follow by 0..5 and 0..9, which means 00 to 59
) # end of group #2
? # optional third part
Matching time formats :
01:00, 02:00, 13:00,
1:00, 2:00, 13:01,
23:59, 15:00,
00:00, 0:00,
14:34:43, 01:00:00
Not matching time formats :
24:00 # hour is out of range [0-23]
12:60 # minute is out of range [00-59]
0:0 # invalid format for minute, at least 2 digits
13:1 # invalid format for minute, at least 2 digits
0:00:0 # invalid format for seconds, at least 2 digits
101:00 # hour is out of range [0-23]
Example :
var_dump(preg_match('#^[01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', '14:25')); // OK
var_dump(preg_match('#^[01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', '25:25')); // KO
var_dump(preg_match('#^[01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', '25:30')); // KO
var_dump(preg_match('#^[01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', '14:2555')); // KO
var_dump(preg_match('#^[01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', '14:65')); // KO
var_dump(preg_match('#^[01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', '14:59')); // OK
var_dump(preg_match('#^[01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', '14:34:43')); // OK
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With