Последнее обновление:
Как проверить, целой ли является переменная, средствами языка РНР?
В языке PHP есть, казалось бы, специальная функция, которая как раз и предназначена для того, чтобы делать проверку, это функция is_int()
Однако, эта функция работает от слова «не очень». Т.е. не очень качественно. Зададим различные значения переменной и проверим, насколько хорошо работает эта функция:
Как видим, все вроде бы работает. А именно - в качестве целых признаются только именно целые числа (быть может, со знаком +
или -
). А вот число типа 0123 тоже признается целым, но... после некоторого преобразования, в итоге получается 83. Точно также шестандатиричное число 0x456 преобразуется вначале в число 1110. которое также признается целым. Тем же числа, которые содержатся в одинарных кавычках, считаются строками, а не целыми.
Функция FILTER_VALIDATE_INT()
Это будет выглядеть в виде следующего кода на языке PHP:
function FILTER_VALIDATE_INT($variable){ if ( filter_var($variable, FILTER_VALIDATE_INT) === false ) { return false; }else{ return true; } }
Как видим, эта функция сработала аналогичным образом.
Сравнение со строкой
Проверку будем вести при помощи следующей функции:
function compare($variable){ if ( strval($variable) !== strval(intval($variable)) ) { return false; }else{ return true; } }
Результат в точности такой же, как и в предыдущих проверках.
При помощи функции ctype_digit()
Применим следующий программный код:
function ctype($variable){ if ( ! ctype_digit(strval($variable)) ) { return false; }else{ return true; } }
Эта функция проверяет наличие цифровых символов в строке. Возвращает true, если каждый символ строки text является десятичной цифрой, либо false в противном случае. И вот она дает несколько иной результат. В частности, отрицательное целое число -123
определено ею как нецелое - из-за наличия знака -
.
Использование регулярных выражений
Использем следующий программный код:
function rege($variable){ if ( ! preg_match('/^\d+$/', $variable) ) { return false; }else{ return true; } }
И вот что получается:
Как видно, результат аналогичен предыдущему, для функции ctype_digit()
.
Вывод
Таким образом, в языке PHP есть несколько способов проверки, является ли переменная целым числом или нет. Конечно, наиболее простой способ - это стандартная функция is_int()
. Однако, во-первых, ее поведение может в будущем измениться в более новых версиях РНР. Во-вторых, в ряде случаев может потребоваться несколько иной алгоритм определения целого числа, не совсем такой, как реализован в функции is_int()
. Поэтому следует иметь в виду все другие способы тоже.