Ограничение ввода числа с двумя цифрами после запятой
Я нашла много различных примеров регулярных выражений для ограничения ввода только двух цифр после запятой, но при попытке вставить цирфу между этими двумя цифрами или до них, они вполне вводятся. С помощью регулярных выражений наверное нельзя это ограничить? Нужно просто проверять строку? Мое регулярное выражение: ^(\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(), а он сам точку ставит.
Описанное вами поведение наблюдается при использовании 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)],
// ...
)