代码之家  ›  专栏  ›  技术社区  ›  Naveed

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

  •  18
  • Naveed  · 技术社区  · 14 年前

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

    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 回复  |  直到 11 年前
        1
  •  36
  •   Yacoby    14 年前

    这样的办法应该行得通。将值强制转换为整数,并将其与原始形式进行比较(如我们使用的) == === PHP在检查相等性时忽略类型)。然后我们知道它是一个整数,我们测试它是否为>0.(取决于您对阳性的定义,您可能需要 >= 0

    $num = "20";
    
    if ( (int)$num == $num && (int)$num > 0 )
    
        2
  •  30
  •   Gordon Haim Evgi    14 年前

    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)
    

        3
  •  3
  •   Decko    14 年前

    我认为这是最好的方法

    if (is_int($num) && $num > 0)
    

    因为转换成int是非常慢的。

        4
  •  2
  •   Imabigfatseacow    14 年前

    我使用正则表达式。想一想就知道了。如果你想让一个数字不是一个完整的正整数(减号和句点),你需要更多的标点符号。所以这只是确保你唯一拥有的是数值0-9。

    if(!ereg('^[0-9]+$', $value)) {
      $errors .= "This is not a positive whole number";
    }
    

    您可以在上面添加另一个部分,以确保它也少于一定数量的字符。希望这有帮助。

        5
  •  1
  •   hram908    11 年前

    如果(!预匹配('/^[0-9]+$/',$input)){

    已弃用:函数ereg()已弃用

        6
  •  1
  •   Nopcea Flavius    4 年前

    if intval($x) > 0 {
     echo "true"
    }