我想检查用户是否输入正整数。
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 问题?
答案 0 :(得分:34)
这样的事情应该有效。将值转换为整数并将其与其原始形式进行比较(因为我们使用==
而不是===
PHP在检查相等时忽略该类型。然后我们知道它是一个整数,我们测试它是> 0.(根据您对阳性的定义,您可能需要>= 0
)
$num = "20";
if ( (int)$num == $num && (int)$num > 0 )
答案 1 :(得分:29)
尝试原生Filter function *
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)
答案 2 :(得分:2)
我使用正则表达式。如果你想一想就很简单。如果要使数字不是整数正整数(减号和句号),则需要更多标点符号。因此,这只是确保您拥有的唯一数字是数字0-9。
if(!ereg('^[0-9]+$', $value)) {
$errors .= "This is not a positive whole number";
}
你可以在那里添加另一部分,以确保它少于一定数量的字符。希望这会有所帮助。
答案 3 :(得分:2)
我想说这是最好的方式
if (is_int($num) && $num > 0)
因为对int的类型转换非常慢。
答案 4 :(得分:1)
最简单的方法是:
如果是intval($ x)> 0 回声“真实”
答案 5 :(得分:0)
if(!preg_match('/ ^ [0-9] + $ /',$ input)){
不推荐使用:不推荐使用函数ereg()