Не удается заставить шаблон RegEx работать правильно в MVC 5 View с использованием Javascript - PullRequest
1 голос
/ 25 мая 2019

Вот мой рисунок. Я пытаюсь разрешить цифры и десятичную с двумя знаками плюс необязательную запятую с тремя цифрами.

var pattern = /^[0-9]+(,\d{3})*\.[0-9]{2}$/;

Разрешить

100,000.12

10,000.12

1,000.12

100,12

10,12

.12 (не могу разрешить это, см. Ниже)

Не разрешать

ABCD

1,, 000,12

1,00.12

1,000.0

1000.

1000

Вот тест. Если я добавлю? после [0-9] он работает здесь, но он не работает в моем MVC 5 View. Модал не открывается, поэтому MVC это не нравится.

^[0-9]?+(,\d{3})*\.[0-9]{2}$

https://regex101.com/r/HwLS7q/1

ОБНОВЛЕНИЕ 1

Не разрешать

000 000,12, 0,12 и т. Д ...

Любая помощь очень ценится! Спасибо!

1 Ответ

1 голос
/ 25 мая 2019

[0-9]?+ - это шаблон, который соответствует 1 или 0 цифрам собственно , не позволяя вернуться к шаблону. Регулярное выражение JS не поддерживает собственнические квантификаторы , следовательно, проблема.

Вам нужно использовать

^[0-9]*(?:,[0-9]{3})*\.[0-9]{2}$

Или

^(?:[0-9]+(?:,[0-9]{3})*)?\.[0-9]{2}$

Здесь [0-9]* соответствует нулю или более цифрам, а (?:[0-9]+(?:,[0-9]{3})*)? соответствует необязательной последовательности из 1+ цифр, за которой следуют 0+ повторений , и трехзначных групп.

См. это демо регулярных выражений .

A более точный шаблон будет ограничивать первый разряд цифрой до 1, 2 или 3 цифр и делать целую часть необязательной:

^(?:[0-9]{1,3}(?:,[0-9]{3})*)?\.[0-9]{2}$

См. Демоверсию regex .

Детали

  • ^ - начало строки
  • (?:[0-9]{1,3}(?:,[0-9]{3})*)? - необязательная последовательность
    • [0-9]{1,3} - от одной до трех цифр
    • (?:,[0-9]{3})* - 0 или более повторений
      • , - запятая
      • [0-9]{3} - три цифры
  • \. - точка
  • [0-9]{2} - две цифры
  • $ - конец строки.
...