我正在寻找获得此测试的最快方法。
因此,functions
,operands
和其他所有内容都是允许的。
我尝试了以下regex
(我不是专家):
0\.[0-9]+|100\.0+|100|[1-9]\d{0,1}\.{0,1}[0-9]+
除了错误地接受0.0
或0.000000
之外,它才有效。
同时它不是最合适和最快的方式。
(如果有人想修正正则表达式而不允许那些0.00
值,那将会很感激)``
答案 0 :(得分:2)
不需要正则表达式:
if (is_numeric($val) && $val > 0 && $val <= 100)
{
echo '$val is number (int or float) between 0 and 100';
}
更新
事实证明,您正在从字符串中获取数值。在这种情况下,最好使用正则表达式提取所有这些,例如:
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)
答案 2 :(得分:0)
这是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。