Как объединить формат валюты с проверкой регулярных выражений - PullRequest
0 голосов
/ 30 сентября 2019

В настоящее время у меня есть функция проверки с регулярным выражением, как показано ниже:

validateFormula(String value) {
    String pattern = (r'^[+-]?\d+((\.\d{1,2})|\d*)$');
    RegExp regExp = new RegExp(pattern);
    if (value.length == 0) {
      return "Number cannot be empty";
    } else if (!regExp.hasMatch(value)) {
      return "Number not valid";
    }
    return null;
  }

Приведенный выше код служит для проверки чисел ввода для приложения калькулятора в соответствии с форматом, заданным регулярным выражением.

У меня есть пользовательский класс формата валюты, как показано ниже:

class CurrencyFormat extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    if (newValue.selection.baseOffset == 0) {
      return newValue;
    }

    double value = double.parse(newValue.text);
    final money = NumberFormat("###,###,###", "en_US");

    String newText = money.format(value);

    return newValue.copyWith(
        text: newText,
        selection: TextSelection.collapsed(offset: newText.length));
  }
}

Вышеупомянутый класс функционирует для создания автоматического формата валюты в TextFormField, если пользователь вводит 1000, тогда TextFormField будет записан непосредственно 1000

Затем я объединяю функции и классы в TextFormField, как показано ниже:

TextFormField(
          inputFormatters: [
            WhitelistingTextInputFormatter(RegExp("[0-9.]")),
            CurrencyFormat(),
          ],
          validator: (value){
            return Validator().validateFormula(value);
          },
          onSaved: (e) => number = double.parse(e),
          keyboardType: TextInputType.number,
          ...
        ),

Когда я запускаю приложение, результаты выглядят так:

enter image description here

Как объединить его с результатом, если пользователь наберет 1000, тогда выход в TextFormFiels автоматически будет равен 1000 с проверкой регулярного выражения. И если введенный пользователем десятичный номер является максимальным, десятичное число составляет 2 цифры. Пример: 40,18 и 1000,58

Поскольку я не могу записать десятичное число в виде TextFormField.

...