Регулярное выражение валюты в Angular - PullRequest
2 голосов
/ 05 августа 2020

Мне нужна помощь по регулярному выражению валюты в Angular. Я не очень хорошо разбираюсь в регулярных выражениях.

Мне нужно регулярное выражение, которое:

  1. позволяет использовать запятую в качестве цифрового разделителя групп, но не в начале или в конце.
  2. допускает округление только двух цифр после десятичной точки.
  3. допускает только одну десятичную точку, но не в начале или в конце.
  4. не допускает 0.00 или 0.

Это мое регулярное выражение:

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

но это регулярное выражение позволяет 0,00

любому здесь, пожалуйста, помогите, спасибо

Желаемые результаты

Действительно:

1,000.00

1000

0,01

24

1,234,000

11,222,245,22

Недействительно:

, 000.00

,,,,, 9

0

0.00

1,22,2,

1,000.

123,123,22

000,300,00

000300,00

000,123

000 000

00 000

0 000

1 Ответ

1 голос
/ 05 августа 2020

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

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

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

Подробности

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