проверить этот формат - «ЧЧ: ММ» [закрыто]

Я не буду больше распространять потребность в символах точка с запятой по сравнению с символами продолжения строки, у них есть как преимущества, так и недостатки, и, в конце концов, это простой выбор дизайна языка (даже если он затрагивает всех пользователей).

Меня больше беспокоит предложение компилятора исправить код.

Если вы когда-либо видели изумительный инструмент (такой как ... гм, давайте подберем инструмент merge) и то, как он выполняет свою автоматизированную работу, вы были бы очень рады, что компилятор не изменил код , В конечном счете, если бы компилятор знал, как исправить код, это означало бы, что он знал о ваших намерениях, и передача мысли еще не была реализована.

Что касается предупреждения ? Любой программист знает, что предупреждения должны рассматриваться как ошибки (а компиляция прекращается), в чем же преимущество?

25
задан Hassaan 22 March 2018 в 09:55
поделиться

4 ответа

Для 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-часовым форматом.

2
ответ дан 28 November 2019 в 17:39
поделиться

Если вам не требуется 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).

0
ответ дан 28 November 2019 в 17:39
поделиться

Еще один подход без использования регулярных выражений.

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).

-2
ответ дан 28 November 2019 в 17:39
поделиться

Если вы ищете секунды (24 часа). Это сработало для меня как шарм.

$time = "23:59:60";    
preg_match("/^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $time)
0
ответ дан 28 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: