Я не буду больше распространять потребность в символах точка с запятой по сравнению с символами продолжения строки, у них есть как преимущества, так и недостатки, и, в конце концов, это простой выбор дизайна языка (даже если он затрагивает всех пользователей).
Меня больше беспокоит предложение компилятора исправить код.
Если вы когда-либо видели изумительный инструмент (такой как ... гм, давайте подберем инструмент merge
) и то, как он выполняет свою автоматизированную работу, вы были бы очень рады, что компилятор не изменил код , В конечном счете, если бы компилятор знал, как исправить код, это означало бы, что он знал о ваших намерениях, и передача мысли еще не была реализована.
Что касается предупреждения ? Любой программист знает, что предупреждения должны рассматриваться как ошибки (а компиляция прекращается), в чем же преимущество?
Для 12-часового матча, который может быть в am и pm, используйте это
/^(1[0-2]|0?[1-9]):[0-5][0-9] (AM|PM)$/i
. Он будет обрабатываться в 01:20 или 1:20 AM. Приведенные выше примеры для 12 часов были неверны, потому что вы могли бы сделать:
00:20
, который не является допустимым 12-часовым форматом.
Если вам не требуется preg_match
, вот еще один новый метод:
$thetime = "20:15" // set the time
$timecheck = explode(":", filter_var($thetime, FILTER_SANITIZE_URL));
$hourvalid = $minvalid = false;
if (count($timecheck) > 1 && count($timecheck) < 4) {
$hourvalid = ((abs(filter_var($timecheck[0], FILTER_SANITIZE_NUMBER_INT)) < 24)
&& (abs(filter_var($timecheck[0], FILTER_SANITIZE_NUMBER_INT)) === (INT) $timecheck[0]))
? true : false;
$minvalid = ((abs(filter_var($timecheck[1], FILTER_SANITIZE_NUMBER_INT)) < 60)
&& (abs(filter_var($timecheck[1], FILTER_SANITIZE_NUMBER_INT)) === (INT) $timecheck[1]))
? true : false;
}
if ($hourvalid && $minvalid) {//valid time
echo $thetime . " is a valid time<br />";
} else {//invalid time
echo $thetime . " is NOT a valid time<br />";
}
Вероятно, не самый эффективный метод в мире, но он делает это. Действительно только для времен от 00:00
до 23:59
. Кроме того, 8:0
проверяется как время (при условии, что вы имеете в виду 08:00
).
Еще один подход без использования регулярных выражений.
if(is_string($foo) && (strlen($foo) == 4 || strlen($foo) == 5) && intval(str_replace(':','',$foo)) > -1 && intval(str_replace(':','',$foo)) < 2360){
stuff to do if valid time
}
else{
stuff to do if invalid time
}
Прежде всего я проверяю, является ли тип данных строкой. Если не очевидно, что это не правильное время. Затем я проверяю, имеет ли строка правильную длину 4/5 букв. С помощью str_replace я удаляю ':', а затем приводю результат к целому числу, которое я могу легко сравнить с желаемым диапазоном времени (в моем примере 00:00 - 23:59).
Если вы ищете секунды (24 часа). Это сработало для меня как шарм.
$time = "23:59:60";
preg_match("/^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $time)