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