如何检查在$ _GET数组变量是否为整数?(How to check whether a varia

2019-06-27 13:43发布

我有一个页面,如下所示:

http://sitename/gallery.php?page=2

它在通过它我们可以浏览底部的分页链接。 每当数字被点击的页面,它会发送带有参数的页面= 1页面= 2等一个GET请求......

当我将这些值存储到$page从德$_GET变量,它是一个字符串值。 我可以将其转换为使用整数(int)是这样的:

if(!empty($_GET['page'])){
       $page = (int)$_GET['page'];
       echo "Page Number: ".$page;
}

但是,我怎么能确保传递的值是一个整数,而不是其他的废话?

Answer 1:

使用过滤器:

if (null !== ($page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE))) {
    // $page is now an integer
}

这也检查变量是否会出现在同一时间的查询字符串。 如果你想缺失和无效的区分你必须离开过的最后一个参数filter_input()

$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
// $page can be null (not present), false (present but not valid) or a valid integer


Answer 2:

使用filter_var()FILTER_VALIDATE_INT上过滤器,并检查返回值。



Answer 3:

使用is_numeric()来 。

is_int()将无法工作,因为GET参数总是字符串。



Answer 4:

我已经在这里和那里留下了一些意见。 由于弱类型,如功能emptyisset往往是不可靠的。 检查最快捷的方式,如果一个参数是int或不IMO将是这样:

if (array_key_exists('page',$_GET) && ($_GET['page'] == (int) $_GET['page']))

铸造为int,然后比较各自的值,只有当将返回true $_GET['page'] 有效的int。 如果你要使用某种原因,严格的类型比较(有的做),你可能会增加一倍投:

if (array_key_exists('page',$_GET) && ($_GET['page'] === (string)((int) $_GET['page'])))

但是,在这种特殊情况下,我实在看不出你为什么会想这样做



Answer 5:

这是一种如何检查参数,如果它是intetger与否。

if (is_int((int) $_GET['user_id']) && (int) $_GET['user_id'] != 0) {
    $user_id = $_GET['user_id'];
}


Answer 6:

使用is_int无助,很可能。 所有传入的参数(包括$ _GET和$ _POST)被解析为被PHP字符串。 该is_int功能检查的数据类型,而不是价值。 ctype_digit只有数字虽然检查:

if(isset($_GET['page']) && ctype_digit($_GET['page']){
   $page = (int)$_GET['page'];
   echo "Page Number: ".$page;
}


Answer 7:

if(!empty($_GET['page']) and is_numeric($_GET['page'])){
       $page = (int)$_GET['page'];
       echo "Page Number: ".$page;
}

is_numeric可能是你所需要的。



Answer 8:

您还可以检查与

isNAN($_GET['something']);//is_numeric($_GET['something'])

它返回一个布尔值(真,FLASE)....如果其真,那么它不是整数,如果假其一个整数。



Answer 9:

if (isset($_GET['page']) && (($get_page_filtered = filter_var($_GET['page'], FILTER_VALIDATE_INT)) !== FALSE) {
  $get_page_int = $get_page_filtered;
}

@see https://stackoverflow.com/a/41868665/6758130



文章来源: How to check whether a variable in $_GET Array is an integer?