Я хочу проверить, вводит ли пользователь положительное целое число.
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 () устарела