Регулярное выражение для диапазона 0-200.0000 (включая 0 и 200) - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь написать регулярное выражение, которое принимает число от 0 до 200.0000.

Мне удалось написать это сейчас:

^([0-9]|[1-8][0-9]|9[0-9]|1[0-9]{2}|200){1}(\.[0-9]{1,4})?$

Но проблема в том, чтоМое выражение принимает числа, такие как 200.0001 и выше.

Любая идея, как установить ограничение на числа после десятичной точки, если число перед это 200?Спасибо

1 Ответ

0 голосов
/ 07 февраля 2019

Проблема в том, что (\.[0-9]{1,4})? соответствует необязательной последовательности точек и от одной до четырех любых цифр после 0, 1, 11, 111 и 200 тоже.Вам нужно использовать (\.[0-9]{1,4})? для чисел до 200 и (\.0{1,4})? для 200.

^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$

См. это демо

Я предлагаю использоватьгруппы, которые не захватывают, а не захватывают группы (то есть конвертируют (...) в (?:...)), поскольку вы не собираетесь использовать эти части позже.

Я вижу, что ваш шаблон создан онлайн автоматически, поэтому я решил немного его «сжать».

Детали шаблона

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