使用PHP检查变量是否包含正整数的最短方法?

时间:2010-04-01 11:12:48

标签: php types

我想检查用户是否输入正整数。

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 问题?

6 个答案:

答案 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()