我想通过检查值是否为数字(0,1,2,3)以及它是否在0到120的范围内来保护我的页面。我认为ctype_digit
函数限制了数字,所以可以不能传递任何负数。如何以最简单的方式限制最大值?
if (!ctype_digit($_GET['category'] AND ...) die('');
if (!ctype_digit($_GET['category'] > 120) ?
我认为intval
但它可以传递负数。
答案 0 :(得分:6)
您可能需要查看PHP's Data Filtering。
它为您的任务(FILTER_VALIDATE_INT
)提供了一个过滤器,该过滤器也接受min_range
和max_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);
}
这是我们正在做的:
这是一个测试:
// 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