PHP preg_match проверки года с 1900 по 2019 - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь проверить дату в формате дд-мм-гггг, где год должен быть между 1900 и 2019.

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

$date="31-12-2020";

if (preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-(19[0-9]{2}|20([0-1]|[0-9]){2})$/",$date)) {
        echo 'True';
    return true;
} else {
        echo 'False';
    return false;
}

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Это полный скрипт, который вам нужен;Функция вернет true или false, если заданная дата находится в диапазоне:

http://sandbox.onlinephpfunctions.com/code/c0e8108319a24ae5ecf993bb940e1f30aab53fc7

$start_date = '01-01-1900';
$end_date = '01-01-2019';
$date_from_user = '01-01-2018';

check_in_range($start_date, $end_date, $date_from_user);


function check_in_range($start_date, $end_date, $date_from_user,$format='d-m-Y')
{
  // Convert to timestamp
  $start_ts = DateTime::createFromFormat($format,$start_date);
  $end_ts = DateTime::createFromFormat($format,$end_date);
  $user_ts = DateTime::createFromFormat($format,$date_from_user);

  // Check that user date is between start & end
  return (($user_ts >= $start_ts) && ($user_ts <= $end_ts));
}
0 голосов
/ 03 марта 2019

Ваша текущая часть года 20([0-1]|[0-9]){2} для обработки с 2000 по 2019 годы просто не требуется никаких изменений, чтобы сделать ее правильной.Третья цифра в части года может быть только 0 или 1, следовательно, она может быть записана как [01], а четвертая цифра может быть любой, следовательно, может быть записана как [0-9], и это дает нам 20[01][0-9].Ниже приводится ваше модифицированное регулярное выражение, которое вы можете использовать:

^(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-(19[0-9]{2}|20[01][0-9])$

Демо

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

^(?:0[1-9]|[1-2][0-9]|3[0-1])-(?:0[1-9]|1[0-2])-(?:19[0-9]{2}|20[01][0-9])$

Демонстрация с группой без захвата

0 голосов
/ 03 марта 2019

Выражение этого года должно быть следующим:

19[0-9][0-9] | 20[0-1][0-9]
...