检查变量在PHP中是否为数字和正整数?

检查变量在PHP中是否为数字和正整数?,php,validation,variables,numbers,integer,Php,Validation,Variables,Numbers,Integer,比如说: <?php // Grab the ID from URL, e.g. example.com/?p=123 $post_id = $_GET['p']; ?> 您可以使用检查变量是否为数字。你也有。要测试它是否为正,只需执行类似if(var>0)的操作。您可以使用来检查var是否为数字。你也有。要测试它是否为正,只需执行if(var>0)之类的操作。正整数和大于0的整数 if(is_int($post_id) && $post_id

比如说:

<?php

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

?>

您可以使用检查变量是否为数字。你也有。要测试它是否为正,只需执行类似if(var>0)的操作。

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

正整数和大于0的整数

if(is_int($post_id) && $post_id > 0) {/* your code here */}

大于等于0的正整数

if(is_int($post_id) && $post_id > 0) {/* your code here */}

您可以这样做:-

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

   //your stuff here

}

您可以这样做:-

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

   //your stuff here

}

is_int仅用于类型检测。和请求参数默认为字符串。所以它不会起作用

独立于类型的工作解决方案:

if(preg_match('/^\d+$/D',$post_id) && ($post_id>0)){
   print "Positive integer!";
}

is_int仅用于类型检测。和请求参数默认为字符串。所以它不会起作用

独立于类型的工作解决方案:

if(preg_match('/^\d+$/D',$post_id) && ($post_id>0)){
   print "Positive integer!";
}

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

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

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

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

使用ctype_数字,但对于正数,您需要添加“>0”复选框

一般情况下,使用ctype_digit的方法如下

if (ctype_digit((string)$var))

为防止错误

请使用ctype_digit,但对于正数,您需要添加“>0”复选框

一般情况下,使用ctype_digit的方法如下

if (ctype_digit((string)$var))


为了防止错误

在此处获取ans,请在此处进行挑剔:$post_id是一个字符串,因为$_get[]中只有字符串。;-)@stesch只是根据其中一个答案意识到了这一点,回到解决方案上。有什么想法吗?@对不起,我只是在开玩笑。我知道你想知道如果用intval()转换字符串的内容是否会得到一个数字。@stesch开玩笑?哪里你说得对,
$\u GET
返回一个字符串。另外,请查看问题中的编辑,让我知道您认为哪种解决方案更好。在此处获取ans在此处进行挑剔:$post_id是一个字符串,因为$_get[]中只有字符串。;-)@stesch只是根据其中一个答案意识到了这一点,回到解决方案上。有什么想法吗?@对不起,我只是在开玩笑。我知道你想知道如果用intval()转换字符串的内容是否会得到一个数字。@stesch开玩笑?哪里你说得对,
$\u GET
返回一个字符串。另外,请查看问题中的编辑,让我知道您认为哪种解决方案更好。您能告诉我
/^\d+$/d
有什么作用吗?关于preg_match:php.net/preg_match/^\d+$/意思是:从开始到结束至少有一个\d(=数字)。尾随的D必须与尾随的\n-s不匹配。(一开始我忘记了唯一的积极要求…我添加了$post>0)刚刚意识到我可以简单地做
if(ctype\u digit($post\u id)){…}
。你觉得怎么样?好吗?是的,很好。唯一的缺点是,您必须确保仅将其用于字符串。当用非字符串调用它时,它可能会做一些奇怪的事情。当然,如果只使用正数,则需要$post_id>0检查。您能告诉我
/^\d+$/d
有什么作用吗?关于preg_match:php.net/preg_match/^\d+$/意思是:从开始到结束至少有一个\d(=数字)。尾随的D必须与尾随的\n-s不匹配。(一开始我忘记了唯一的积极要求…我添加了$post>0)刚刚意识到我可以简单地做
if(ctype\u digit($post\u id)){…}
。你觉得怎么样?好吗?是的,很好。唯一的缺点是,您必须确保仅将其用于字符串。当使用非字符串调用它时,它可能会做一些奇怪的事情。当然,如果您只坚持正数,则需要$post\u id>0检查。您的意思是像我的问题中看到的那样,像
if(ctype\u digit($post\u id)){…}
?如果是的话,请把它加在你的上面,这样我就可以把它标记为答案了。@it_me-是的,那就对了。为了避免警告,您还可以在使用
ctype\u digit()
测试变量之前测试变量是否已设置。请记住,如果您的数字有浮点值,即12.50,这将不起作用。您的意思是像我的问题中看到的
if(ctype\u digit($post\u id)){…}
?如果是的话,请把它加在你的上面,这样我就可以把它标记为答案了。@it_me-是的,那就对了。为了避免警告,您还可以在使用
ctype\u digit()
测试变量之前测试变量是否已设置。请记住,如果您的数字有浮点值,即12.50,则此操作将不起作用