#regex #preg-match
Вопрос:
У меня есть следующее регулярное выражение ^(2[0-3]|1?[0-9])?(:[0-5]?[0-9])?$
8:45
совпадений, однако 08:45
, нет.
Как это можно переписать, чтобы также разрешить 08:45
?
Я также хотел бы проверить наличие .
или :
, если возможно, вместо просто .
Комментарии:
1. Что вы имеете в виду вместо просто . ? Ты не позволяешь дот сейчас! Вы имели в виду, что хотели бы разрешить точку, а также двоеточие в качестве разделителя?
2. я сделал да, я сделал :?. и это, кажется, делает свое дело
3. Я думаю, ты хочешь
[.:]
вместо:
этого . Обратите внимание, что вам не нужно избегать двоеточий — они не имеют специального значения регулярных выражений.
Ответ №1:
Помимо «1», также разрешайте «0» в начале часов до «20:00».:
^(2[0-3]|[01]?[0-9])?(:[0-5]?[0-9])?$
Обратите внимание, что вам не нужно избегать двоеточий — они не имеют специального значения регулярных выражений.
Кроме того, поскольку все является необязательным, это регулярное выражение соответствует пустой строке.
Если вы хотите что-то сопоставить, добавьте (?!$)
после ^
. ^(?!$)
это отрицательный взгляд вперед, привязанный к началу, который требует, чтобы конец ввода не следовал за началом ввода (т. Е. Ввод не имеет нулевой длины).
Ответ №2:
Пожалуйста, попробуйте это регулярное выражение.
[0]?d[:.]dd
который может захватывать 8:45 08:45 8.45 и 08.45
или нажмите на эту кнопку, чтобы увидеть результат.
Комментарии:
1. Я бы предпочел сохранить существующее регулярное выражение, которое у меня есть
2. Это не совпадает
12:34
, но совпадает00:99