Ограничение регулярного выражения для диапазона чисел, с ограничением до 3 десятичных знаков - PullRequest
2 голосов
/ 27 сентября 2019

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

Есть два числа, разделенных дефисом, каждоечисло может иметь десятичную точку на конце, за которой могут следовать до трех чисел (3dp)

все, что набирает до этого, должно проходить через регулярное выражение, поэтому;

0
02
023.
023.2
023.22
023.223-
023.223-3
023.223-33
023.223-333
023.223-333.
023.223-333.3
023.223-333.33
023.223-333.333

- все допустимые значениячто-либо вне этого формата должно быть недопустимым, например;

0.2343
0.233-0.2343

У меня есть некоторый успех при проверке чисел по обе стороны от дефиса;

^\d*\.?(\d{1,3})?$

Затем я включаю это дляобе стороны с дефисом посередине;

^\d*\.?(\d{1,3})?\-?\d*\.?(\d{1,3})?$

Проверьте это здесь: https://regex101.com/r/klw01G/1

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

Какое решение ограничить первый набор 3dp?Должно ли быть условие, основанное на символе .?

1 Ответ

2 голосов
/ 27 сентября 2019

Вам необходимо вложить дополнительные группы:

^\d+(?:\.\d{0,3}(?:-(?:\d+(?:\.\d{0,3})?)?)?)?$

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

enter image description here

Если вам также нужно разрешить пустую строку, оберните всю часть между якорями ^ и $ необязательной группой:

^(?:\d+(?:\.\d{0,3}(?:-(?:\d+(?:\.\d{0,3})?)?)?)?)?$

Подробности

  • ^ - начало строки
  • \d+ - 1+ цифр
  • (?:\.\d{0,3}(?:-(?:\d+(?:\.\d{0,3})?)?)?)? - необязательная последовательность
    • \.\d{0,3} - . и от 0 до 3 цифр
    • (?:-(?:\d+(?:\.\d{0,3})?)?)? - необязательная последовательность
    • - - дефис
    • (?:\d+(?:\.\d{0,3})?)? - необязательная последовательность
      • \d+ - 1+ цифр
      • (?:\.\d{0,3})? - необязательная последовательность точек, а затем от 0 до 3 цифр
  • $ - конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...