регулярное выражение соответствует cond1 ИЛИ соответствует cond2 в одной команде - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно проверить, находится ли введенная дата между 2019-09-01 - 2019-12-31. Я могу сделать это следующим образом: $ koodi - это пользовательский ввод

$pattern1 = "/^2019-(09|11)-([0-2][0-9]|30)$/";
$pattern2 = "/^2019-(10|12)-([0-2][0-9]|3[0-1])$/";

if(preg_match($pattern1, $koodi) || preg_match($pattern2, $koodi)) {
   echo "<code>$koodi</code> ok!<br>\n";
}
else {
  echo ("<code>$koodi</code> NOT ok!<br>\n");
}

Я пытался сделать эти два условия в один оператор регулярного выражения, возможно ли это, и если да, то как? Я пробовал:

$pattern = "/^2019-(09|11)-([0-2][0-9]|30)$ | ^2019-(10|12)-([0-2][0-9]|3[0-1])$/";

Не сработало, как и следующее, где я пытался заключить в скобки условия:

$pattern = "/(^2019-(09|11)-([0-2][0-9]|30)$) | (^2019-(10|12)-([0-2][0-9]|3[0-1])$)/";

1 Ответ

2 голосов
/ 17 июня 2020

Пожалуйста, не используйте для этого регулярное выражение, что, если даты изменятся или что, если следующий разработчик должен прийти, поработать над этим и выяснить, что вы делаете?

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

<?php

$currentDate = date('Y-m-d');
$currentDate = date('Y-m-d', strtotime($currentDate));

$startDate = date('Y-m-d', strtotime("01/09/2019"));
$endDate = date('Y-m-d', strtotime("01/10/2019"));

if (($currentDate >= $startDate) && ($currentDate <= $endDate)){
    echo "Current date is between two dates";
}else{
    echo "Current date is not between two dates";  
}

относительно того, почему ваши шаблоны не работают, потому что у вас есть пространство вокруг канала в посередине, и вам, возможно, придется заключить все в скобки. У вас также есть $ на полпути через регулярное выражение, которое соответствует всей строке, я бы обычно имел его только в конце, например: -

^(regex1|regex2)$

У меня нет написал правильную версию на случай, если вы захотите ее использовать (пожалуйста, используйте метод объектов даты)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...