Shortest way to check if a variable contains positive integer using PHP?

后端 未结 6 1750
野性不改
野性不改 2020-12-08 11:04

I want to check if user input a positive integer number.

1    = true
+10  = true
.1   = false
-1   = false
10.5 = false


Just a positive number. 
No charact         


        
相关标签:
6条回答
  • 2020-12-08 11:37

    Something like this should work. Cast the value to an integer and compare it with its original form (As we use == rather than === PHP ignores the type when checking equality). Then as we know it is an integer we test that it is > 0. (Depending on your definition of positive you may want >= 0)

    $num = "20";
    
    if ( (int)$num == $num && (int)$num > 0 )
    
    0 讨论(0)
  • 2020-12-08 11:39

    I would say this is the best way

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

    as typecasting to an int is very slow.

    0 讨论(0)
  • 2020-12-08 11:49

    Try the native Filter function*

    filter_var($value, FILTER_VALIDATE_INT, array(
        'options' => array('min_range' => 1)
    ));
    

    * if you just want to make sure the input string consists of an arbitrary length digit sequence, use a regex with [0-9] or [\d+]

    Examples with 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 讨论(0)
  • 2020-12-08 11:51

    I use a regular expression. Very simple if you think about it. You need more punctuation marks if you want to make a number not a whole positive integer (minus sign and a period). So this just makes sure the only thing you have are numbers 0-9 for the value.

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

    You could add another part on there to make sure it is less than a certain amount of characters as well. Hope this helps.

    0 讨论(0)
  • 2020-12-08 11:55

    if(!preg_match('/^[0-9]+$/', $input)) {

    Deprecated: Function ereg() is deprecated

    0 讨论(0)
  • 2020-12-08 11:55

    the easiest way is:

    if intval($x) > 0 {
     echo "true"
    }
    
    0 讨论(0)
提交回复
热议问题