关于php:如何检查数字(浮点数或整数)是否在一个范围内(0 – 100)

How to check if a number (float or integer) is within a range (0 - 100)

我在找最快的方法来做这个测试。所以,functionsoperands和其他一切都是允许的。我试过以下的regex(我不是专家):

1
0\.[0-9]+|100\.0+|100|[1-9]\d{0,1}\.{0,1}[0-9]+

它的作用只是错误地接受0.00.000000等。而且这不是最恰当和最快的方式。

(如果有人想修改regex以不允许这些0.00值,我们将不胜感激)`


不需要regex:

1
2
3
4
if (is_numeric($val) && $val > 0 && $val <= 100)
{
    echo '$val is number (int or float) between 0 and 100';
}

演示

更新

结果是你从一个字符串中得到了数值。在这种情况下,最好使用regex来提取所有的元素,比如:

1
2
3
4
5
6
7
8
9
if (preg_match_all('/\d+\.?\d*/', $string, $allNumbers))
{
    $valid = [];
    foreach ($allNumbers[0] as $num)
    {
        if ($num > 0 && $num <= 100)
            $valid[] = $num;
    }
}

您可以省去is_numeric检查,因为匹配的字符串无论如何都保证是数字的…


使用BCCOMP

这是BCMath函数的完美用例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function compare_numberic_strings($number) {
    if (
        is_numeric($number) &&
        bccomp($number, '0') === 1 &&
        bccomp($number, '100') === -1
    ) {
       return true;
    }
    return false;
}

echo compare_numberic_strings('0.00001');
//returns true

echo compare_numberic_strings('50');
//returns true

echo compare_numeric_strings('100.1');    
//returns false

echo compare_numeric_strings('-0.1');
//returns false

从手册中:

Returns 0 if the two operands are equal, 1 if the left_operand is
larger than the right_operand, -1 otherwise.


我认为你的regex模式应该是这样的:

1
^\d{1,2}$|(100)

演示