RegEx для сопоставления времени в PHP - PullRequest
2 голосов
/ 14 мая 2019

Я хочу проверить формат ввода времени с помощью регулярного выражения.

Я сделал это, чтобы проверить этот формат "H: m" (24-часовой формат):

$date = '23:59';

if(!preg_match('/^(2[0-3]|[01]?[0-9]):([0-5]?[0-9])$/', $date)) {
    form_set_error('Error in time format');
}

Теперь мне нужнотакже для проверки этого формата:

"H:m - H:m"

при

$date = '09:00 - 10:00';

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Вы можете просто удалить начальный и конечный символы и проверить, совпадают ли они в любое время, может быть похоже на:

$re = '/(2[0-3]|[01]?[0-9]):([0-5]?[0-9])/m';
$date = '09:00 - 10:00';

preg_match_all($re, $date, $matches, PREG_SET_ORDER, 0);

foreach ($matches as $value) {
    echo $value[0] . " is a match \n";
}

выход

09:00 is a match 
10:00 is a match

Объединение RegEx

Если вы хотите объединить два регулярных выражения, вы можете просто использовать логическое ИЛИ и поместить свои выражения в две группы захвата:

(expression 1)|(expression 2) 
1 голос
/ 14 мая 2019
(2[0-3]|[01]?[0-9]):([0-5]?[0-9])(\s*-\s*(2[0-3]|[01]?[0-9]):([0-5]?[0-9]))?
  • (2[0-3]|[01]?[0-9]):([0-5]?[0-9]) - ваше регулярное выражение из вопроса
  • (\s*-\s*(2[0-3]|[01]?[0-9]):([0-5]?[0-9]))? - необязательно "- 00:00"
    • \s*-\s* - необязательный пробел, тире, необязательный пробел (удалить *, чтобы сделать необязательным)
    • (2[0-3]|[01]?[0-9]):([0-5]?[0-9]) - снова ваше регулярное выражение
    • ? - делает вторую часть необязательной. Означает 0 или 1 предыдущей группы. (удалите это ?, чтобы сделать его необязательным)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...