PHP. Является ли строка целым числом?

Проблема в следующем: нужно определить, является ли строка целым числом. Перепробовал многое, но ничего не работает корректно. Вот:

if(is_int($value)) { ...

Если предавать аргумент как string, т.е. в кавычках, например, '123', то даже в этом случае возвращается false.

if((int)($value)) { ...

Если делать преобразование типа, то в этой ситуации возвращается true, если аргумент число с плавающей точкой...тоже не подходит :(

if(ctype_digit($value)) { ...

В этом же варианте возвращается true, даже если аргумент начинается с нуля, т.е. '0123', что по сути не является целым числом.

Может у кого-то есть рабочий вариант?

Заранее благодарю!


Ответы (3 шт):

Автор решения: Kirill Babinec

Ну, а если как-то так:

function isDigit($value) {
    return false !== strpos($value, '.')
        ? false
        : is_numeric($value);
}
→ Ссылка
Автор решения: CryEngine V - FlowGraph

  1. Целое - 0.2s (TRUE)
  2. Целое типа строка ("12") - 0.2s (TRUE)
  3. Float - 0.2s (FALSE)
  4. Float типа строка ("12.25") - 0.2s (FALSE)

if ((is_int($val) || ctype_digit($val)) && (int)$val >= 0 )  echo 'true'; else echo 'false';

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

А, и про число 0 - это целое число.

→ Ссылка
Автор решения: Алексей Петрович

Можно так:

$isInt = (string) (int) $value === (string) $value;
→ Ссылка