如何限制数字的最大值?

时间:2012-02-23 14:22:02

标签: php

我想通过检查值是否为数字(0,1,2,3)以及它是否在0到120的范围内来保护我的页面。我认为ctype_digit函数限制了数字,所以可以不能传递任何负数。如何以最简单的方式限制最大值?

if (!ctype_digit($_GET['category'] AND ...) die('');

if (!ctype_digit($_GET['category'] > 120) ?

我认为intval但它可以传递负数。

9 个答案:

答案 0 :(得分:6)

您可能需要查看PHP's Data Filtering

它为您的任务(FILTER_VALIDATE_INT)提供了一个过滤器,该过滤器也接受min_rangemax_range个参数:

$value = filter_var($_GET['category'], FILTER_VALIDATE_INT, array(
    'options' => array(
        // An optional default value
        'default' => 123,

        // Desired validation range
        'min_range' => 0,
        'max_range' => 120
    ),
));

// $value is FALSE when validation failed, or an "int" with
// the correct value.

答案 1 :(得分:4)

if (!ctype_digit($_GET['category']) || $_GET['category'] > 120) die('')

基本上这表示"如果它不是数字或者如果它大于120,请停止"

答案 2 :(得分:0)

if (is_int($_GET['category']) and $_GET['category'] > 0 and $_GET['category'] <= 120)

这将检查数字是否大于零且小于或等于120。

答案 3 :(得分:0)

if(!ctype_digit($_GET['category']) || $_GET['category'] > 120) //do whatever you want

答案 4 :(得分:0)

if(!ctype_digit($_GET['category']) || $_GET['category'] > 120) {
...

答案 5 :(得分:0)

// Make sure it is an integer.
$category = (int) $_GET['category'];

if($category<0 OR $category>120){
   // Code to be executed if the number is out of range...
}

答案 6 :(得分:0)

不是答案,但这就是为什么你所拥有的不起作用:

if (!ctype_digit($_GET['category'] > 120) ?
                 ^^^^^^^^^^^^^^^^^^^^^^^

指示的部分位于ctype调用内。因此,首先PHP将检查GET值是否大于120,将其转换为布尔值true / false。 THEN 应用了ctype,它总是为false,因为布尔值不是数字。

答案 7 :(得分:0)

我正在添加此内容,因为根据您的问题主题,有些人可能会在搜索此任务的过程中偶然发现。
有时您只想“限制数值变量的最大值”。

$val=($val <= 120)?$val:120;

这是我在一行中找到的最佳方式(min()和max()的组合可以做同样的事情,但计算量更大) 如果$ val大于120,它将被修剪为120,否则使用原始值。

答案 8 :(得分:0)

这是一种简单的方法:

function set_range($value, $minimum, $maximum) {
    return min(max($minimum, $value), $maximum);
}

这是我们正在做的:

  1. 将数字与我们的最小值进行比较,并采用最大值。
  2. 将结果与我们的最大值进行比较,并采用最低的数字。

这是一个测试:

// Check every fifth number between 0-60 and 
// set output to within range of 20 to 40.
//
for ($i = 0; $i < 60; $i += 5) {
    echo $i . " becomes " . set_range($i, 20, 40) . PHP_EOL;
}

如果要检查数字是否在范围内,可以执行以下操作:

function in_range($value, $minimum, $maximum) {
   return ($value >= $minimum) && ($value <= $maximum);
}

echo (in_range( 7, 20, 40)) ? "yes" : "no";  // output: no
echo (in_range(33, 20, 40)) ? "yes" : "no";  // output: yes