簡體   English   中英

如何限制數字的最大值?

[英]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_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.
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);
}

這是我們正在做的事情:

  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

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM