Регулярное выражение для форматирования валюты - Java - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу добавить фильтр к моему EditText, в котором принимаются различные значения валют, такие как

Формат валюты США: 123 456,00

Формат испанской валюты: 123.456,00

Кроме того, я хочу сохранить максимум 10 цифр до десятичной точки и максимум 2 цифры после десятичной.

Мое регулярное выражение для фильтрацииЗначение EditText равно (([0-9|(,.)]{0,13})?)?((,.)[0-9]{0,2})?

Но это регулярное выражение принимает значения типа ,,,,,,, или .......

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

Любая помощь приветствуется.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Ваш шаблон может соответствовать повторяющимся точкам или повторяющимся запятым только потому, что все части являются необязательными из-за знака вопроса. Может также соответствовать пустой строке.

Вы можете использовать чередование с повторяющейся группой, которая начинается с точки или запятой, за которой следуют 3 или 2 цифры для предотвращения последовательных точек и запятых:

Пояснение

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

Regex demo

1 голос
/ 24 апреля 2019

Метод getCurrencyInstance в NumberFormat имеет параметр Locale. Это стандартный способ решения вашей проблемы с форматированием валют.

...