Также есть filter_var()
и это встроенная функция, которая проверяет диапазон .Это не дает именно то, что вы хотите (никогда не возвращает истину), но с помощью "чит" мы можем изменить это.
Я не думаю, что это хороший код для удобства чтения, но я показываю, что это возможно:
return (filter_var($someNumber, FILTER_VALIDATE_INT, ['options' => ['min_range' => $min, 'max_range' => $max]]) !== false)
Просто заполните $someNumber
, $min
и $max
.filter_var
с этим фильтром возвращает либо логическое значение false, когда число находится за пределами диапазона, либо само число, когда оно находится в пределах диапазона.Выражение (!== false
) заставляет функцию возвращать значение true, когда число находится в пределах диапазона.
Если вы хотите как-то сократить его, помните о приведении типа.Если бы вы использовали !=
, это было бы ложно для числа 0 в диапазоне -5;+5 (пока это должно быть правдой).То же самое произошло бы, если бы вы использовали приведение типа ((bool)
).
// EXAMPLE OF WRONG USE, GIVES WRONG RESULTS WITH "0"
(bool)filter_var($someNumber, FILTER_VALIDATE_INT, ['options' => ['min_range' => $min, 'max_range' => $max]])
if (filter_var($someNumber, FILTER_VALIDATE_INT, ['options' => ['min_range' => $min, 'max_range' => $max]])) ...
Представьте себе (из другого ответа):
if(in_array($userScore, range(-5, 5))) echo 'your score is correct'; else echo 'incorrect, enter again';
Если пользователь напишет пустое значение ($userScore = ''
) это было бы правильно, так как in_array
установлено здесь по умолчанию, не является более строгим, и это означает, что диапазон также создает 0
и '' == 0
(не строго), но '' !== 0
(есливы бы использовали строгий режим).Такие вещи легко пропустить, и поэтому я немного об этом написал. Мне стало известно, что строгие операторы используются по умолчанию, и программист может использовать нестрогие только в особых случаях .Я думаю, что это хороший урок.Большинство примеров приводят к неудаче в некоторых случаях, потому что не строгая проверка.
Тем не менее, мне нравится filter_var, и вы можете использовать функции выше (или ниже, если бы я так "поднялся";)) и сделать свой собственный обратный вызовкоторый вы будете использовать в качестве FILTER_CALLBACK
фильтра.Вы можете вернуть bool или даже добавить параметр openRange
.И еще один хороший момент: вы можете использовать другие функции , например, проверять диапазон каждого числа массивов или значений POST / GET.Это действительно мощный инструмент.