1

例如,说:

<?php

    // Grab the ID from URL, e.g. example.com/?p=123
    $post_id = $_GET['p'];

?>

如何检查变量$post_id是否为数字和正整数(即 0-9,不是浮点数、分数或负数)?

编辑:不能使用is_int,因为$_GET返回一个字符串。认为我需要使用intval()or ctype_digit(),后者似乎更合适。例如:

if( ctype_digit( $post_id ) ) { ... }
4

6 回答 6

5

要检查字符串输入是否为正整数,我总是使用函数ctype_digit。这比正则表达式更容易理解和更快。

if (isset($_GET['p']) && ctype_digit($_GET['p']))
{
  // the get input contains a positive number and is safe
}
于 2013-10-12T11:36:27.070 回答
2

你可以这样做: -

if( is_int( $_GET['id'] ) && $_GET['id'] > 0 ) {

   //your stuff here

}
于 2013-10-12T10:51:33.140 回答
2

is_int 仅用于类型检测。请求参数默认为字符串。所以它不会工作。http://php.net/is_int

类型无关的工作解决方案:

if(preg_match('/^\d+$/D',$post_id) && ($post_id>0)){
   print "Positive integer!";
}
于 2013-10-12T11:08:50.527 回答
2

使用 ctype_digit 但对于正数,您需要添加“> 0”检查

if (isset($_GET['p']) && ctype_digit($_GET['p']) && ($_GET['p'] > 0))
{
  // the get input contains a positive number and is safe
}

一般来说,以这种方式使用ctype_digit

if (ctype_digit((string)$var))

防止错误

于 2015-10-02T13:46:07.760 回答
1

大于 0 的正整数

if(is_int($post_id) && $post_id > 0) {/* your code here */}
于 2013-10-12T10:47:00.153 回答
0

您可以使用is_numeric检查 var 是否为数字。你也有is_int。要测试它是否是肯定的,只需执行 if (var > 0) 之类的操作。

于 2013-10-12T10:46:52.467 回答