如何检查数字(浮点数或整数)是否在一个范围内(0 - 100)

时间:2015-01-16 14:46:41

标签: php regex range

我正在寻找获得此测试的最快方法。 因此,functionsoperands和其他所有内容都是允许的。 我尝试了以下regex(我不是专家):

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

除了错误地接受0.00.000000之外,它才有效。 同时它不是最合适和最快的方式

(如果有人想修正正则表达式而不允许那些0.00值,那将会很感激)``

3 个答案:

答案 0 :(得分:2)

不需要正则表达式:

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

Demo

更新

事实证明,您正在从字符串中获取数值。在这种情况下,最好使用正则表达式提取所有这些,例如:

if (preg_match_all('/\d+\.?\d*/', $string, $allNumbers))
{
    $valid = [];
    foreach ($allNumbers[0] as $num)
    {
        if ($num > 0 && $num <= 100)
            $valid[] = $num;
    }
}

你可以省略is_numeric支票,因为匹配的字符串无论如何都保证是数字......

答案 1 :(得分:0)

我认为您的regex模式应如下所示:

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

Demo

答案 2 :(得分:0)

使用bccomp

这是BCMath功能的完美用例。

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

从手册:

  

如果两个操作数相等则返回0,如果left_operand为则返回1   大于right_operand,否则为-1。