Подтвердить что ты не робот

Самый короткий способ проверить, содержит ли переменная положительное целое число с помощью PHP?

Я хочу проверить, вводит ли пользователь положительное целое число.

1    = true
+10  = true
.1   = false
-1   = false
10.5 = false


Just a positive number. 
No characters.
No special character.
No dot.
No minus sign.

Я попробовал функцию is_int(), но он возвращает false даже в положительных целых числах. Есть ли проблема в int?

4b9b3361

Ответ 1

Что-то вроде этого должно работать. Передайте значение целому числу и сравните его с его первоначальной формой (поскольку мы используем ==, а не === PHP игнорирует тип при проверке равенства). Тогда, поскольку мы знаем, что это целое число, мы проверяем, что оно > 0. (В зависимости от вашего определения положительного вы можете хотеть >= 0)

$num = "20";

if ( (int)$num == $num && (int)$num > 0 )

Ответ 2

Попробуйте встроенную Функция фильтра *

filter_var($value, FILTER_VALIDATE_INT, array(
    'options' => array('min_range' => 1)
));

*, если вы просто хотите убедиться, что входная строка состоит из произвольной последовательности цифр по длине, используйте регулярное выражение с [0-9] или [\ d +]

Примеры с filter_var:

var_dump( filter_var(1, FILTER_VALIDATE_INT) ); // int(1)

var_dump( filter_var('1', FILTER_VALIDATE_INT) ); // int(1)

var_dump( filter_var('+10', FILTER_VALIDATE_INT) ); // int(10)

var_dump( filter_var(.1, FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var('.1', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var(-1, FILTER_VALIDATE_INT, 
    array('options' => array('min_range' => 1))) ); // bool(false)

var_dump( filter_var('-1', FILTER_VALIDATE_INT, 
    array('options' => array('min_range' => 1))) ); // bool(false)

var_dump( filter_var('2147483648', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var('0xFF', FILTER_VALIDATE_INT) ); // bool(false)

var_dump( filter_var(0xFF, FILTER_VALIDATE_INT) ); // int(255)

Ответ 3

Я использую регулярное выражение. Очень просто, если вы думаете об этом. Вам нужно больше знаков препинания, если вы хотите сделать число не целое положительное целое (знак минус и период). Таким образом, это просто гарантирует, что единственное, что у вас есть, - это цифры 0-9 для значения.

if(!ereg('^[0-9]+$', $value)) {
  $errors .= "This is not a positive whole number";
}

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

Ответ 4

Я бы сказал, что это лучший способ

if (is_int($num) && $num > 0)

поскольку приведение типа к int очень медленно.

Ответ 5

Самый простой способ:

если intval ($ x) > 0  echo "true"

Ответ 6

if (! preg_match ('/^ [0-9] + $/', $input)) {

Устаревший: функция ereg() устарела