颤动:验证浮动

时间:2018-05-06 19:15:51

标签: validation flutter

我试图让dart验证我的用户将在我的表单中输入的浮点数。我从这个SO线程(Regular expression for floating point numbers)获取了关于浮点数的Regex表达式的指导(例如,12.830),并在我的flutter应用程序中尝试了它。

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 :(得分:1)

如果您要匹配@IBOutlet weak var TheCharacter: UIImageView!

,请在other thread向下滚动几行到部分

在这里,您确实希望匹配123.,因为它是前往123.途中的垫脚石。

因此,将您的RegExp更改为123.45当您使用数字小键盘时,您可能可以免除前导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 '));
}