Ограничение ввода числа с двумя цифрами после запятой

Я нашла много различных примеров регулярных выражений для ограничения ввода только двух цифр после запятой, но при попытке вставить цирфу между этими двумя цифрами или до них, они вполне вводятся. С помощью регулярных выражений наверное нельзя это ограничить? Нужно просто проверять строку? Мое регулярное выражение: ^(\d+(.?\d{0,2})?) Например, ввожу 5.37, все, больше я ввести не могу, но если попробовать вставить цифру между 3 и 7, она вставляется, а нужно запретить ее вставлять. Т.е. изначально у нас 5.37, вставляем 9, получаем 5.397. Подскажите, как можно запретить вводить дополнительные цифры между этими двумя десятичными цифрами или впереди них.


Ответы (2 шт):

Автор решения: Лакшми

Вышла из положения следующим образом.

Добавила функцию, которая проверяет количество цифр после точки:

bool _checkInput(String text)
{
  if (text.length - text.indexOf('.') > 3)
    return false;
  else return true;
}

Не делаю проверки text на точку, потому что заведомо туда отправляю double.toString(), а он сам точку ставит.

→ Ссылка
Автор решения: Spatz

Описанное вами поведение наблюдается при использовании FilteringTextInputFormatter, но можно написать свой собственный форматер:

class DecimalNumberInputFormatter extends TextInputFormatter {
  DecimalNumberInputFormatter({required precision}) {
    regEx = RegExp('^\\d+\\.?\\d{0,$precision}');
  }

  late final RegExp regEx;

  @override
  TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
    String newString = regEx.stringMatch(newValue.text) ?? "";
    return newString == newValue.text ? newValue : oldValue;
  }
}
TextFormField(
   inputFormatters: [DecimalNumberInputFormatter(precision: 2)],
   // ...
)
→ Ссылка