Как проверить, находится ли число (с плавающей запятой или целое число) в диапазоне (0 — 100)

Я ищу самый быстрый способ получить этот тест.
Так 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

Решение

Нет необходимости в регулярных выражениях:

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 проверьте, потому что совпадающие строки гарантированно будут числовыми в любом случае …

2

Другие решения

Я думаю твой regex шаблон должен выглядеть так:

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

демонстрация

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, если два операнда равны, 1, если left_operand
больше, чем right_operand, -1 в противном случае.

0
По вопросам рекламы [email protected]