Is there a nicer way to do this?
if( $_POST['id'] != (integer)$_POST['id'] )
    echo 'not a integer';
I've tried
if( !is_int($_POST['id']) )
But is_int() doesn't work for some reason.
My form looks like this
<form method="post">
   <input type="text" name="id">
</form>
I've researched is_int(), and it seems that if 
is_int('23'); // would return false (not what I want)
is_int(23);   // would return true
I've also tried is_numeric()
is_numeric('23'); // return true
is_numeric(23); // return true
is_numeric('23.3'); // also returns true (not what I want)
it seems that the only way to do this is: [this is a bad way, do not do it, see note below]
if( '23' == (integer)'23' ) // return true
if( 23 == (integer)23 ) // return true
if( 23.3 == (integer)23.3 ) // return false
if( '23.3' == (integer)'23.3') // return false
But is there a function to do the above ?
Just to clarify, I want the following results
23     // return true
'23'   // return true
22.3   // return false
'23.3' // return false
Note: I just figured out my previous solution that I presented will return true for all strings. (thanks redreggae)
$var = 'hello';
if( $var != (integer)$var )
    echo 'not a integer';
// will return true! So this doesn't work either.
This is not a duplicate of Checking if a variable is an integer in PHP, because my requirements/definitions of integer is different than theres.
Using int() function The function int(x) converts the argument x to an integer. If x is already an integer or a float with integral value, then the expression int(x) == x will hold true. That's all about determining whether a variable is an integer or not in Python.
PHP converts the string to an int, which is 0 (as it doesn't contain any number representation).
To check if given string is a number or not, use PHP built-in function is_numeric(). is_numeric() takes string as an argument and returns true if the string is all numbers, else it returns false.
The key difference between these two functions is that is_int() checks the type of variable, while is_numeric() checks the value of the variable. $var = "123"; $var is a string of numbers, not an integer value.
try ctype_digit
if (!ctype_digit($_POST['id'])) {     // contains non numeric characters }   Note: It will only work with string types. So you have to cast to string your normal variables:
$var = 42; $is_digit = ctype_digit((string)$var);   Also note: It doesn't work with negative integers. If you need this you'll have to go with regex. I found this for example:
EDIT: Thanks to LajosVeres, I've added the D modifier. So 123\n is not valid.
if (preg_match("/^-?[1-9][0-9]*$/D", $_POST['id'])) {     echo 'String is a positive or negative integer.'; }   More: The simple test with casting will not work since "php" == 0 is true and "0" === 0 is false! See types comparisons table for that.
$var = 'php'; var_dump($var != (int)$var); // false  $var = '0'; var_dump($var !== (int)$var); // true 
                        try filter_var function
filter_var($_POST['id'], FILTER_VALIDATE_INT);   use:
if(filter_var($_POST['id'], FILTER_VALIDATE_INT)) {      //Doing somethings...  } 
                        In PHP $_POST values are always text (string type).
You can force a variable into the integer type like this:
$int_id = (int)$_POST['id'];
That will work if you are certain that $_POST['id'] should be an integer. But if you want to make absolutely sure that it contains only numbers from 0 to 9 and no other signs or symbols use:
if( ctype_digit( $_POST['id'] ) )
{
  $int_id = (int)$_POST['id'];
}
                        Using is_numeric() for checking if a variable is an integer is a bad idea.
This function will send TRUE for 3.14 for example. It's not the expected behavior
To do this correctly, you can use one of these options :
Considering this variables array :
$variables = [
    "TEST 0" => 0,
    "TEST 1" => 42,
    "TEST 2" => 4.2,
    "TEST 3" => .42,
    "TEST 4" => 42.,
    "TEST 5" => "42",
    "TEST 6" => "a42",
    "TEST 7" => "42a",
    "TEST 8" => 0x24,
    "TEST 9" => 1337e0
];
# Check if your variable is an integer
if( ! filter_var($variable, FILTER_VALIDATE_INT) ){
  echo "Your variable is not an integer";
}
Output :
TEST 0 : 0 (type:integer) is not an integer ✘
TEST 1 : 42 (type:integer) is an integer ✔
TEST 2 : 4.2 (type:double) is not an integer ✘
TEST 3 : 0.42 (type:double) is not an integer ✘
TEST 4 : 42 (type:double) is an integer ✔
TEST 5 : 42 (type:string) is an integer ✔
TEST 6 : a42 (type:string) is not an integer ✘
TEST 7 : 42a (type:string) is not an integer ✘
TEST 8 : 36 (type:integer) is an integer ✔
TEST 9 : 1337 (type:double) is an integer ✔
# Check if your variable is an integer
if ( strval($variable) != strval(intval($variable)) ) {
  echo "Your variable is not an integer";
}
Output :
TEST 0 : 0 (type:integer) is an integer ✔
TEST 1 : 42 (type:integer) is an integer ✔
TEST 2 : 4.2 (type:double) is not an integer ✘
TEST 3 : 0.42 (type:double) is not an integer ✘
TEST 4 : 42 (type:double) is an integer ✔
TEST 5 : 42 (type:string) is an integer ✔
TEST 6 : a42 (type:string) is not an integer ✘
TEST 7 : 42a (type:string) is not an integer ✘
TEST 8 : 36 (type:integer) is an integer ✔
TEST 9 : 1337 (type:double) is an integer ✔
# Check if your variable is an integer
if( ! ctype_digit(strval($variable)) ){
  echo "Your variable is not an integer";
}
Output :
TEST 0 : 0 (type:integer) is an integer ✔
TEST 1 : 42 (type:integer) is an integer ✔
TEST 2 : 4.2 (type:double) is not an integer ✘
TEST 3 : 0.42 (type:double) is not an integer ✘
TEST 4 : 42 (type:double) is an integer ✔
TEST 5 : 42 (type:string) is an integer ✔
TEST 6 : a42 (type:string) is not an integer ✘
TEST 7 : 42a (type:string) is not an integer ✘
TEST 8 : 36 (type:integer) is an integer ✔
TEST 9 : 1337 (type:double) is an integer ✔
# Check if your variable is an integer
if( ! preg_match('/^\d+$/', $variable) ){
  echo "Your variable is not an integer";
}
Output :
TEST 0 : 0 (type:integer) is an integer ✔
TEST 1 : 42 (type:integer) is an integer ✔
TEST 2 : 4.2 (type:double) is not an integer ✘
TEST 3 : 0.42 (type:double) is not an integer ✘
TEST 4 : 42 (type:double) is an integer ✔
TEST 5 : 42 (type:string) is an integer ✔
TEST 6 : a42 (type:string) is not an integer ✘
TEST 7 : 42a (type:string) is not an integer ✘
TEST 8 : 36 (type:integer) is an integer ✔
TEST 9 : 1337 (type:double) is an integer ✔
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With