Флаттер: проверка поплавков - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь получить дротик для проверки числа, которое мой пользователь введет в мою форму. Я взял руководство из этого потока SO ( Регулярное выражение для чисел с плавающей запятой ) по выражениям Regex для чисел с плавающей запятой (например, 12,830) и попробовал его в своем приложении для флаттера.

new TextFormField(
                        controller:  amt_invested,
                        keyboardType: TextInputType.number,
                        inputFormatters: [WhitelistingTextInputFormatter(new RegExp(r'[+-]?([0-9]*[.])?[0-9]+'))],
                        decoration: const InputDecoration(
                            filled: true,
                            fillColor: CupertinoColors.white,
                            border: const OutlineInputBorder(),
                            labelText: 'Amount invested',
                            prefixText: '\R',
                            suffixText: 'ZAR',
                            suffixStyle:
                            const TextStyle(color: Colors.green)),
                        maxLines: 1,
                        validator: (val) => val.isEmpty ? 'Amount is required' : null,
                      ),

Тем не менее, регулярное выражение не позволяет мне войти в точку остановки в поплавке, в отличие от того, что сказал поток SO. Как мне заставить это работать должным образом?

enter image description here

1 Ответ

0 голосов
/ 07 мая 2018

Прокрутите вниз на несколько строк в другом потоке до раздела , если хотите сопоставить 123.

Здесь вы хотите соответствовать 123., поскольку это ступенька на пути к 123.45.

Итак, измените свой RegExp на new RegExp(r'^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$'); Поскольку вы используете цифровую клавиатуру, вы, вероятно, можете обойтись без ведущего ^ и трейлинг $

Этот пример

main() {
  RegExp re;

  re = new RegExp(r'[+-]?([0-9]*[.])?[0-9]+');
  print(test(re, '1234'));
  print(test(re, '1234.'));
  print(test(re, '1234.5'));
  print(test(re, '1234a'));
  print(test(re, '1234..'));

  print('---');

  re = new RegExp(r'^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$');
  print(test(re, '1234'));
  print(test(re, '1234.'));
  print(test(re, '1234.5'));
  print(test(re, '1234a'));
  print(test(re, '1234..'));
  print(test(re, '1234 '));
}

выходы

true
false <- this causes your problem
true
false
false
---
true
true
true
false
false
false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...