Как соответствовать числу, которое меньше или равно 100? - программирование
Подтвердить что ты не робот

Как соответствовать числу, которое меньше или равно 100?

Я хочу сопоставить число, которое меньше или равно 100, оно может быть любым в пределах 0-100, но регулярное выражение не должно совпадать для числа, которое больше 100, например 120, 130, 150, 999 и т.д.

4b9b3361

Ответ 1

Попробуй это

\b(0*(?:[1-9][0-9]?|100))\b

объяснение

"
\b                # Assert position at a word boundary
(                 # Match the regular expression below and capture its match into backreference number 1
   0              # Match the character "0" literally
      *           # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   (?:            # Match the regular expression below
                  # Match either the regular expression below (attempting the next alternative only if this one fails)
         [1-9]    # Match a single character in the range between "1" and "9"
         [0-9]    # Match a single character in the range between "0" and "9"
            ?     # Between zero and one times, as many times as possible, giving back as needed (greedy)
      |           # Or match regular expression number 2 below (the entire group fails if this one fails to match)
         100      # Match the characters "100" literally
   )
)
\b                # Assert position at a word boundary
"

Посетите (ссылка удалена) для будущих проблем.

Ответ 2

Как насчет этого для регулярного выражения:

^([0-9]|[1-9][0-9]|100)$

это подтвердило бы примеры 7, 82, 100, но не проверяет 07 или 082.

Проверьте это для получения дополнительной информации (и вариантов, включая нулевое префикс) при проверке диапазона номеров


Если вам нужно обслуживать номера с плавающей запятой, вы должны прочитать это, вот выражение, которое вы можете использовать:

Плавающая точка: ^[-+]?([0-9]|[1-9][0-9]|100)*\.?[0-9]+$

Ответ 3

Используйте Утверждения кода, если вам нужно регулярное выражение (в конце):

 /^(.+)$(??{$^N>=0 && $^N<=100 ? '':'^'})/

Тест:

my @nums = (-1, 0, 10, 22, 1e10, 1e-10, 99, 101, 1.001e2);

print join ',', grep 
                /^(.+)$(??{$^N>=0 && $^N<=100 ? '':'^'})/,
                @nums

Результат:

 0,10,22,1e-010,99

(== > Вот, чтобы узнать о утверждениях кода).

Ответ 4

Мой практический совет.

Лично я бы воздержался от написания такого сложного регулярного выражения. Что, если ваш номер изменится с 100 до 200 в ближайшем будущем. Вашему регулярному выражению придется значительно изменить, и писать его может даже сложнее. Все вышеперечисленные решения НЕ являются явным объяснением, и вам придется дополнить его комментарием в коде. Это запах.

Вопросы читаемости. Код предназначен для людей, а не для машин.

Почему бы не написать некоторый код вокруг него и сохранить регулярное выражение мертвым простым для понимания.

Ответ 5

это соответствует от 0 до 100

^0*([0-9]|[1-8][0-9]|9[0-9]|100)$

Ответ 6

regex для этого

perl -le 'for (qw/0 1 19 32.4 100 77 138 342.1/) { print "$_ is ", /^(?:100|\d\d?)$/ ? "valid input" : "invalid input"}'

Ответ 7

Этот regEx соответствует диапазонам 0-100 и номерам запретов, таких как 001:

\b(0|[1-9][0-9]?|100)\b

Ответ 8

позвольте мне добавить еще один вариант

^\d|100$

Ответ 9

Следующее регулярное выражение соответствует целым числам без 0 в начале (проверьте это здесь):

^(\d?\d|100)$

Если в начале есть 0, используйте (протестируйте здесь):

^0*(\d?\d|100)$

Кроме того, если вы хотите сопоставить все числа (включая числа с плавающей запятой), то вы можете попробовать (протестируйте здесь):

^0*(\d?\d|100)(\.\d+)*$