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

Php 如何检查数字(浮点或整数)是否在范围(0-100)内,php,regex,range,Php,Regex,Range,我正在寻找最快的方法来完成这个测试。 因此,函数,操作数以及其他一切都是允许的。 我尝试了以下regex(我不是专家): 除了错误地接受0.0或0.000000等等之外,它还能工作。 而且这不是最合适、最快的方法 (如果有人想修正正则表达式,使其不允许那些0.00值,我们将不胜感激)`不需要正则表达式: if (is_numeric($val) && $val > 0 && $val <= 100) { echo '$val is number

我正在寻找最快的方法来完成这个测试。 因此,
函数
操作数
以及其他一切都是允许的。 我尝试了以下
regex
(我不是专家):

除了错误地接受
0.0
0.000000
等等之外,它还能工作。 而且这不是最合适、最快的方法

(如果有人想修正正则表达式,使其不允许那些
0.00
值,我们将不胜感激)`

不需要正则表达式:

if (is_numeric($val) && $val > 0 && $val <= 100)
{
    echo '$val is number (int or float) between 0 and 100';
}
如果(是数值($val)&&$val>0&&$val不需要正则表达式:

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

if(is_numeric($val)&&&$val>0&&$val我认为您的
regex
模式应该如下所示:

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

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

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

使用 这是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;如果左/右操作数相等,则返回1 大于右操作数,否则为-1

使用 这是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;如果左/右操作数相等,则返回1 大于右操作数,否则为-1



你为什么不把字符串转换成一个数字,然后比较数字呢?这不是更容易吗?我不确定正则表达式是否是最好的方法。是的,我不一定要找正则表达式,如果你有其他的解决方案,我只是编辑了这个问题,正则表达式显然不是用于此目的的工具。更改
0\.[0-9]+
0\[0-9]*[1-9][0-9]*
@casimirithippolyte谢谢。我知道正则表达式不是最好的。这就是为什么我要求最快的方法。我试过你的正则表达式,但它不接受
0.001
。我说得对吗?你为什么不把字符串转换成一个数字,然后比较数字?这不是更容易吗?我不确定正则表达式是最好的方法是的,我不是在寻找一个正则表达式,如果你有其他的解决方案被广泛接受,我只是编辑了这个问题正则表达式显然不是一个这样的工具。用
0\.[0-9]+
更改
0\.[0-9]*[1-9][0-9]*
@casimirithippolyte谢谢。我知道正则表达式不是最好的。这就是为什么我要求最快的方法。我尝试了你的正则表达式,但它不接受
0.001
。我说得对吗?
是数字(1e0)
返回
true
-因此我认为正则表达式是解决方案Maybe,但无论如何,对于我的用例,我可能首先需要使用正则表达式从字符串中提取数字(int或float),类似于
([0-9]+\.{0,1}[0-9]*)
然后检查数字是否在发布的解决方案的范围内。@kuus您不需要正则表达式。请看我的答案。@violator667:这是因为
1e0
是数字,它与
1^0
(1乘以0的幂)相同,根据定义,这是一个有效值…请尝试
var\u dump(1e0);
在php中,它转储1@Tek我的问题是这个数字和其他东西在一个字符串中,比如:
sometext($),@31.321312(rew)
,所以我需要从那里提取它,然后进行检查。
是数字(1e0)
返回
true
-因此我认为正则表达式是解决方案Maybe,但无论如何,对于我的用例,我可能首先需要使用正则表达式从字符串中提取数字(int或float),类似于
([0-9]+\.{0,1}[0-9]*)
然后检查数字是否在发布的解决方案的范围内。@kuus您不需要正则表达式。请看我的答案。@violator667:这是因为
1e0
是数字,它与
1^0
(1乘以0的幂)相同,根据定义,这是一个有效值…请尝试
var\u dump(1e0);
在php中,它转储1@Tek我的问题是,这个数字和其他东西在一个字符串中,比如:
sometext($),@31.321312(rew)
所以我需要从那里把它提取出来,然后进行检查。这比上面的答案快吗?@kuus首先,读一下:。但是要回答你的问题,是的。这些函数是用C内部编写的。这比PHP本身要快得多。另外。这是一个很大的优点。你永远不应该使用
来比较浮点。永远不要关于这一点,e在PHP.net上也是一个很大的警告。这就是BCMath函数的作用。@Tek:bollocks…这些函数是用C->yes编写的,所以?C比PHP->yes快得多。PHP是用什么语言编写的?=>C。不管你怎么看它
$val>0&$val@Tek谢谢,我知道所有的谈话、思考和问题我们进行了微优化,但我仍然想知道什么是最快的:)@EliasVanOotegem无论哪种方法,使用传统运算符比较浮点都是一个很大的问题。这比上面的答案快吗?@kuus首先,读一下:。但要回答你的问题,是的。这些函数都是用C编写的。这比PHP本身快得多。另外,这是一个很大的优点。你永远不应该使用
来进行比较mpare浮动。永远。PHP.net上也有一个关于这一点的大警告。这就是BCMath函数的用途。@Tek:bollocks…这些函数是用C->yes编写的,所以?C比PHP->yes快得多。PHP是用什么语言编写的?=>C。不管你怎么看它
$val>0&$val@Tek谢谢,我知道所有的说法,关于微优化的思考和问题,但我仍然想知道什么是最快的:)@EliasVanOotegem无论哪种方式使用传统运算符比较浮动都是一个很大的否定。这个正则表达式对于这个用例是错误的,我会投票否决答案,但我不能。这个正则表达式对于这个用例是错误的,我会投票否决答案,但我不能。