我有以下代码
$page = $_GET['p']; if($page == "") { $page = 1; } if(is_int($page) == false) { setcookie("error", "Invalid page.", time()+3600); header("location:somethingwentwrong.php"); die(); } //else continue with code
我将用它来查看数据库的不同“页面”(结果1-10、11-20等)。但是,我似乎无法使is_int()函数正常工作。在网址(noobs.php?p = 1)中输入“ 1”会给我无效的页面错误,以及类似“ asdf”的错误。
使用is_numeric()检查,如果一个变量是一个整数是一个坏主意。该函数将返回TRUE用于3.14例如。这不是预期的行为。
is_numeric()
TRUE
3.14
要正确执行此操作,可以使用以下选项之一:
考虑此变量数组:
$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) === false ) { echo "Your variable is not an integer"; }
输出:
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 ( strval($variable) !== strval(intval($variable)) ) { echo "Your variable is not an integer"; }
# Check if your variable is an integer if ( ! ctype_digit(strval($variable)) ) { echo "Your variable is not an integer"; }
# Check if your variable is an integer if ( ! preg_match('/^\d+$/', $variable) ) { echo "Your variable is not an integer"; }