Самый короткий способ проверить, содержит ли переменная положительное целое число с помощью 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 проблемы?

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

 $num = "20"; if ( (int)$num == $num && (int)$num > 0 ) 

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

 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) 

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

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

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

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

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

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

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

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

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

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