TextField не принимает ввод после добавления 2-х десятичных положительных чисел в белый список - PullRequest
1 голос
/ 10 мая 2019
                keyboardType: TextInputType.number,
                inputFormatters: [
                  WhitelistingTextInputFormatter(
                      RegExp("^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*\$"))
                ],
              ),

Я использую эти настройки в моем TextFormField и использую это регулярное выражение, которое я взял из другого SO сообщения.Тесты на regex101.com выглядят неплохо, но я не могу поместить в форму любые входные данные с помощью этого регулярного выражения.

Моя цель с помощью регулярного выражения - получить два десятичных положительных числа с плавающей запятой.

Регулярное выражение больше нуля с двумя десятичными знаками

1 Ответ

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

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

RegExp(r"^\s*\d*(?:\.\d{1,2})?\s*$")
       ^                         ^

Или, если вы хотите сохранить требование «хотя бы одна ненулевая цифра в строке» (как на это указывает правило, которое вы пробовали):

RegExp(r"^(?=.*[1-9])\s*\d*(?:\.\d{1,2})?\s*$")

Дело в том, что:

  • Вы должны использовать необработанный строковый литерал для экранирования регулярных выражений для работы с одиночной обратной косой чертой
  • $ - конец строкипривязка только в том случае, если она не экранирована и не заключена в квадратные скобки
  • Для повышения производительности указатель должен быть поставлен после ^.

Детали шаблона

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