Intereting Posts
Предупреждение: mysql_select_db () Доступ запрещен для пользователя '' @ 'localhost' (с использованием пароля: НЕТ) Объединение массива и ассоциативного массива Регулярные выражения и соответствие Как загрузить изображения в обычной форме вставки (MySql)? после загрузки изображение должно иметь три версии разных размеров и разных имен Использование mysql_real_escape_string с PDO (без подключения к локальному серверу) WooCommerce 3.0+ изменить формат столбца даты заказа администратора Kohana 3: Пример модели с проверкой Лог вращается с помощью Monolog в Symfony2 Подтвердить URL для многоязычия – японский langauga php Недопустимый тип смещения в isset или пустой Нужно ли иметь wsdl-файл для создания веб-службы в php? Является ли foreach гарантированным итерирование в порядке массива в php? Используйте разные исполняемые файлы CLI версии PHP для одной команды Как ограничить длину тега заголовка с помощью PHP Функция Coalesce для PHP?

Как вы соответствуете 12-часовому времени hh: mm в регулярном выражении?

Как вы могли бы встретить 12-часовое время в регулярном выражении – другими словами, матч 12:30, но не 14:74? Благодаря!

Это должно работать:

([1-9]|1[012]):[0-5][0-9] 

Это пример проблемы, где «эй, я знаю, я буду использовать регулярные выражения!» это неправильное решение. Вы можете использовать регулярное выражение, чтобы проверить, что ваш формат ввода имеет цифровую цифру, цифру-цифру, а затем используйте логику программирования, чтобы убедиться, что значения находятся в пределах диапазона, который вы ожидаете. Например:

 /(\d\d?):(\d\d)/ if ($1 >= 1 && $1 <= 12 && $2 < 60) { // result is valid 12-hour time } 

Это намного легче прочитать и понять, чем некоторые из запутанных примеров регулярных выражений, которые вы видите в других ответах здесь.

 ^(00|0[0-9]|1[012]):[0-5][0-9] ?((a|p)m|(A|P)M)$ 

^ – сопоставить начало строки.

(00|0[0-9]|1[012]) – любое двузначное число до 12. Требуется две цифры.

: – сопоставить двоеточие

[0-5][0-9] – сопоставить любое двузначное число от 00 до 59.

? – Сопоставьте пробел ноль или один раз.

((a|p)m|(A|P)M) – Сопоставьте am или pm, не учитывая регистр.

$ – совпадение конца строки.

почему регулярное выражение? вы можете сделать это, просто проверите целое число

 $str = "12:74"; list($h , $m ) = explode(":",$str); if ( ($h <=12 && $h >=0 ) && ($m <=59 && $m >=0) ) { print "Time Ok."; }else{ print "Time not ok"; } 

Например: ((?:1[0-2]|0\d)\:(?:[0-5]\d)) если вы хотите, чтобы ведущее 0 в течение часа, ((?:1[0-2]|\d)\:(?:[0-5]\d)) если вы этого не сделаете и ((?:1[0-2]|0?\d)\:(?:[0-5]\d)) если вам все равно.

Я считаю, что вышеизложенное потерпело неудачу, по крайней мере, одним способом, особенно в отношении таких строк, как «13:00» (в этом случае спички Кита «3:00»).

Этот должен решить эту проблему, а также других, поднятых.

 ([01][0-2]|(?<!1)[0-9]):([0-5][0-9]) 
 (0?\d|1[0-2]):([0-5]\d) 

Это будет соответствовать всем, начиная с 0:00 до 12:59. Между прочим, это 13 часов. Если вы не хотите соответствовать 0:00 – 0:59, попробуйте это вместо:

 ([1-9]|1[0-2]):([0-5]\d) 

Вы можете использовать это:

 /((?:1[0-2])|(?:0?[0-9])):([0-5][0-9]) ?([ap]m)/ /1 => hour /2 => minute /3 => am/pm 

Следующие совпадения дополняют и не прокладывают часы в 24-часовом часовом (т.е. 00:00 – 23:59) между 00:00 и 12:59.

 (?:(?<!\d)[0-9]|0[0-9]|1[0-2]):[0-5][0-9] 

Матчи:

  • 00:00
  • 00:58
  • 1:34
  • 1:34
  • 8:35
  • 12:23
  • 12:59

Nonmatches:

  • 13:00
  • 13:23
  • 14:45
  • 23:59
 ^(?:(?:1?(?:[0-2]))|[1-9]):[0-5][0-9] 

Вот 12-часовая модель с проверкой AM и PM.

TIME12HOURSAMPM_PATTERN = "^(?:(?<!\\d)[0-9]|0[0-9]|1[0-2]):[0-5][0-9] ?((a|p)m|(A|P)M)$";