Как вы могли бы встретить 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]
Матчи:
Nonmatches:
^(?:(?: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)$";