Регулярное выражение Десятичные числа (Динамическое) Java - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужна ваша помощь, потому что у меня есть регулярное выражение для проверки того, какой тип числа с плавающей точкой получает, это потому, что десятичный разделитель может быть получен как . или ,. У меня нет способа форсировать один типразделителя так сильно, что я хочу проверить его с помощью regex, и я не смог закончить его, я пытался несколькими способами, и мне не удалось получить ожидаемый результат, вы можете направить меня, пожалуйста.

Номера: 171, 171.00, 1770, 1,700, 1,700.00, 1,777,777, 1,777,777.00 ,, 1777777.00

Обычная фраза

  1. Опция: String patternString = "^[0-9]{0,3}+|(\\,[0-9]{0,3})+(\\.[0-9]{0,2})?$
  2. Опция: String patternString = "^[0-9]{0,3}|(\\,[0-9]{0,3})(\\.[0-9]{0,2})?$";
  3. Опция: String patternString = "^[0-9]+(\\,[0-9]{0,})+(\\.[0-9]{0,})?$ | ^[0-9]+(\\,[0-9]{0,})?$";
  4. Опция: String patternString = "^[0-9]+(\\.[0-9]{0,})+(\\,[0-9]{0,})?$";

Ожидаемый результат:

Для этого случая я только оцениваю, где образецчисло равно #, ## 0.00, для другого случая я бы полагал, что инвестировать будет , для .

Вариант 1:

  • 1.71 - ОК
  • 1.71717171 - Хорошо
  • 171 - Хорошо
  • 171.00 - Хорошо
  • 1770 - Хорошо
  • 1,700 - Хорошо
  • 1,700.00 - ОК
  • 1,777,777 - ОК
  • 1,777,777.00 - ОК
  • 1777777.00 - ОК

Вариант 2:

  • 171,00 - ошибка (ложь)
  • 1,700.00 - ошибка (ложь)
  • 1,777,777 - ошибка (ложь)
  • 1,777,777.00 - ошибка (ложь)
  • 1777777,00 - ошибка (ложь)
  • 1,00 - ошибка (ложь)

1 Ответ

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

В вашем примере чисел вы начинаете с 1+ раз цифры.Далее следует дополнительная повторяющаяся часть, которая соответствует запятой и 3 раза цифре, а цифры заканчиваются необязательной точкой и 2 раза цифрой или точкой, за которой следует 1+ раза цифра.

Вы можете использовать и чередование :

^\d+(?:(?:,\d{3})*(?:\.\d{1,2})?|\.\d+)$

На Java:

String regex = "^\\d+(?:(?:,\\d{3})*(?:\\.\\d{1,2})?|\\.\\d+)$";

Пояснение

  • ^ Началострока
  • \d+ Совпадение 1+ цифр
  • (?: Группа без захвата
    • (?:,\d{3})* Повторить 0+ раз совпадения запятой и 3 цифры
    • (?:\.\d{1,2})? Опционально соответствует точка и 2 цифры
  • | Или
  • \.\d+ Точка и 1+ цифры
  • ) Закрыть группу без захвата
  • $ Конец строки

См. regex demo

...