Слишком большая область регулярных выражений - PullRequest
1 голос
/ 10 июня 2019

Я создал (в основном) работающее регулярное выражение, которое принимает любое число> 0 или <= 12, допуская до двух десятичных знаков. Проблема в том, что он также принимает числа от 12 до 13, такие как 12,25, а также 0. </p>

Мой шаблон регулярного выражения /^\b(0*([0-9]|1[0-2]))\b\.?[0-9]{0,2}$/

Как я могу изменить это, чтобы предотвратить принятие 0 или чисел больше 12?

1 Ответ

2 голосов
/ 10 июня 2019

Вы можете использовать

^(?=[^1-9]*[1-9])0*(?:(?:\d|1[01])?(?:\.[0-9]{0,2})?|12(?:\.0{0,2})?)$

См. Демоверсию регулярных выражений и график регулярных выражений :

enter image description here

Если цифра после символа десятичного разделителя требуется , заменить {0,2} на {1,2}:

^(?=[^1-9]*[1-9])0*(?:(?:\d|1[01])?(?:\.[0-9]{1,2})?|12(?:\.0{1,2})?)$

подробности

  • ^ - начало строки
  • (?=[^1-9]*[1-9]) - положительный прогноз, требующий одну ненулевую цифру (цифра от 1 до 9) после любых символов, кроме цифр от 1 до 9
  • 0* - любые 0+ ведущих нулей
  • (?: - запуск группы без захвата:
    • (?:\d|1[01])?(?:\.[0-9]{1,2})? - 0 до 11 чисел (возможно, для сравнения см. ? после первой закрывающей скобки) с последующей необязательной последовательностью . и от 1 до 2 цифр
    • | - или
    • 12(?:\.0{1,2})? - 12 опционально с . и 1-2 цифрами
  • ) - конец группы без захвата
  • $ - конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...