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

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


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 )


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)


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.