Я ищу самый быстрый способ получить этот тест.
Так functions
, operands
а все остальное разрешено.
Я пробовал со следующим regex
(Я не эксперт)
0\.[0-9]+|100\.0+|100|[1-9]\d{0,1}\.{0,1}[0-9]+
Это работает за исключением того, что он ошибочно принимает 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';
}
Обновить
Оказывается, вы получаете числовые значения из строки. В этом случае было бы лучше извлечь их все, используя регулярное выражение, что-то вроде:
if (preg_match_all('/\d+\.?\d*/', $string, $allNumbers))
{
$valid = [];
foreach ($allNumbers[0] as $num)
{
if ($num > 0 && $num <= 100)
$valid[] = $num;
}
}
Вы можете оставить is_numeric
проверьте, потому что совпадающие строки гарантированно будут числовыми в любом случае …
Это идеальный вариант использования функций 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, если left_operand
больше, чем right_operand, -1 в противном случае.