[英]How can I limit the max value of number?
我想通過檢查值是否為數字 (0,1,2,3) 以及它是否在 0 到 120 的范圍內來保護我的頁面。我認為ctype_digit
函數限制了數字,因此不能傳遞任何負數。 如何以最簡單的方式限制最大值?
if (!ctype_digit($_GET['category'] AND ...) die('');
if (!ctype_digit($_GET['category'] > 120) ?
我在考慮intval
但它可以傳遞負數。
您可能想看看PHP 的數據過濾。
它為您的任務( 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.
if (!ctype_digit($_GET['category']) || $_GET['category'] > 120) die('')
基本上這是說“如果它不是數字或大於 120,則停止”
我添加此內容是因為有些人可能會根據您的問題主題在這里尋找完成此任務的方法。
有時您只想“限制數字變量的最大值”。
$val=($val <= 120)?$val:120;
這是我在一行中找到的最好方法(min() 和 max() 的組合可以做同樣的事情,但計算量更大)如果 $val 大於 120,它將被修剪為 120,否則為原始值用來。
這是一個簡單的方法:
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
if (is_int($_GET['category']) and $_GET['category'] > 0 and $_GET['category'] <= 120)
這將檢查數字是否大於零且小於或等於 120。
if(!ctype_digit($_GET['category']) || $_GET['category'] > 120) //do whatever you want
if(!ctype_digit($_GET['category']) || $_GET['category'] > 120) {
...
// 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...
}
不是答案,但這就是您所擁有的不起作用的原因:
if (!ctype_digit($_GET['category'] > 120) ?
^^^^^^^^^^^^^^^^^^^^^^^
指示的部分在 ctype 調用中。 所以首先 PHP 將檢查 GET 值是否大於 120,將其轉換為布爾值 true/false。 然后應用 ctype,這將始終為 false,因為布爾值不是數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.