When filtering a value that should be an integer filter_var()
will return the filtered data, in this case the integer, or false if the value is not an integer. Floats are not integers:
var_dump(filter_var('10', FILTER_VALIDATE_INT));
var_dump(filter_var('a10', FILTER_VALIDATE_INT));
var_dump(filter_var('10a', FILTER_VALIDATE_INT));
var_dump(filter_var(' ', FILTER_VALIDATE_INT));
var_dump(filter_var('10.00', FILTER_VALIDATE_INT));
var_dump(filter_var('10,000', FILTER_VALIDATE_INT));
var_dump(filter_var('-5', FILTER_VALIDATE_INT));
var_dump(filter_var('+7', FILTER_VALIDATE_INT));
Results:
int(10)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
int(-5)
int(7)
If you are expecting only digits, you can use a regular expression:
if(is_string($_GET['entry']) && preg_match('#^[0-9]+$#', $_GET['entry']))
// this is a digit (positive) integer
else
// entry is incorrect
If you convert this value into an integer, you don't have to do this check and so you can use filter_var
.