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

Nav*_*eed 18 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.
Run Code Online (Sandbox Code Playgroud)

我尝试了is_int()函数,但即使在正整数上它也返回false.有一个字符串到int问题?

Yac*_*oby 34

这样的事情应该有效.将值转换为整数并将其与其原始形式进行比较(因为我们使用==而不是===PHP在检查相等时忽略该类型).然后我们知道它是一个整数,我们测试它是> 0.(根据你可能想要的积极的定义>= 0)

$num = "20";

if ( (int)$num == $num && (int)$num > 0 )
Run Code Online (Sandbox Code Playgroud)

  • @NAVEED这可能是因为你在做`int($ num)`.通过将要转换的类型包含在括号中来完成转换.在这种情况下`(int)$ num`. (11认同)
  • `(int)$ num == $ num``(int)'abcde'=='abcde'`将返回true (3认同)

Gor*_*don 30

尝试本机过滤功能*

filter_var($value, FILTER_VALIDATE_INT, array(
    'options' => array('min_range' => 1)
));
Run Code Online (Sandbox Code Playgroud)

*如果您只想确保输入字符串包含任意长度的数字序列,请使用带有[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)
Run Code Online (Sandbox Code Playgroud)

  • +1:这就是我要做的事情,但要记住的一件事是0不会验证,因为PHP会自动将其转换为false.使用`===`来避免评估中的自动类型转换. (2认同)