Слишком много символов If для проверки действительно содержит действительный год из четырех цифр - PullRequest
1 голос
/ 11 апреля 2019

Следующее, если оператор работает, но он уродлив, и у меня такое ощущение, что того же можно достичь с помощью preg_match REGEX .Как?

По сути, я пока не знаю, как ограничить количество цифр до 4 в регулярном выражении.И как только критерий из 4 цифр будет удовлетворен, я хотел бы ограничить возвращение истины между 2019 и 2025 годами.

Пример регулярного выражения:

/* digits only, no dots */
function is_digits($element) {
    return !preg_match ("/[^0-9]/", $element);
}

Пример PHP

// SET $TARGET_YEAR TO current year in [yyyy] format.
// Is set, Is not empty, Is numeric, Is 4 digits long?
if(isset($_GET["year"]) && !empty($_GET["year"]) && is_numeric($_GET["year"]) && strlen($_GET["year"]) == 4) {
  // WE HAVE A REAL YEAR.
  // SET $TARGET_YEAR TO target year in [yyyy] format.
  self::$TARGET_YEAR = $_GET["year"];
} else {
  // WE DON'T HAVE A REAL YEAR.
  // SET $TARGET_YEAR TO current year in [yyyy] format.
  self::$TARGET_YEAR = date('Y');
}

Ответы [ 3 ]

3 голосов
/ 11 апреля 2019

Регулярные выражения не нужны для такой простой проверки. Ваш существующий код может быть уменьшен до этого:

$year = (int)$_GET["year"] ?? 0;
if ($year >= 2019 && $year <= 2025) {
    // do stuff
}

Просто приведите строку как целое число , а затем проверьте диапазон. Если строка не является допустимым числом, приведение превратит его в 0. Если значение не установлено, null coalesce также превратит его в ноль.

2 голосов
/ 11 апреля 2019

Это должно сработать.Когда вы вставите фигурные скобки номер 4, это позволит только 4 числа, если вы используете 0,4, это позволит от 0 до 4 цифр.

/* digits only, no dots */
function is_digits($element) {
    $element = preg_match ("/^[0-9]{4}$/", $element);

    if($element > 2019 && $element < 2025) {
       return true; //Or $element
    } else {
       return false; //Or something else you want
    }
}
1 голос
/ 11 апреля 2019

Вы можете использовать встроенный фильтр проверки:

$opts = ['options' => ['min_range' => 2019, 'max_range' => 2025]];

if($date = filter_input(INPUT_GET, 'year', FILTER_VALIDATE_INT, $opts)) {
    //yes
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...