首页 > 解决方案 > 十进制数的正则表达式在颤动的TextFormField inputFormatters中不起作用

问题描述

正则表达式的要求:

我试图在RegExr上生成相同的正则表达式,它满足了我的要求,但是当我将相同的应用于颤振表单 TextFormField 时,它不起作用。

正则表达式: ^[[0-9]{0,8}(\.[0-9]{1,4})?$|^[[0-9]{0,9}(\.[0-9]{1,3})?$|^[[0-9]{0,10}(\.[0-9]{1,2})?$|^[[0-9]{0,11}(\.[0-9]{1})?$|^[0-9]{0,12}

Flutter TextFieldCode:

TextFormField(
   controller: _textEditingController,
   keyboardType:TextInputType.numberWithOptions(decimal: true),
   inputFormatters: <TextInputFormatter>[
          WhitelistingTextInputFormatter(RegExp(r'^[[0-9]{0,8}(\.[0-9]{1,4})?$|^[[0-9]{0,9}(\.[0-9]{1,3})?$|^[[0-9]{0,10}(\.[0-9]{1,2})?$|^[[0-9]{0,11}(\.[0-9]{1})?$|^[0-9]{0,12}')),
   ],
),

使用上面的代码我无法dot(.)在 TextFormField 中输入。

注意:用户不能在TextFormField.

标签: regexflutterdartregex-group

解决方案


请注意,如果要验证整个输入序列,则需要定义 avalidator: validateMyInput然后实现该函数:

String validateMyInput(String value) {
    RegExp regex = new RegExp(r'^(?=\D*(?:\d\D*){1,12}$)\d+(?:\.\d{1,4})?$');
    if (!regex.hasMatch(value))
      return 'Enter Valid Number';
    else
      return null;
  }

在 Flutter中的表单验证中查看更多详细信息。

正则表达式是

^(?=\D*(?:\d\D*){1,12}$)\d+(?:\.\d{1,4})?$

查看它的演示细节

  • ^- 字符串的开始
  • (?=\D*(?:\d\D*){1,12}$)- 字符串中需要一到十二位数字
  • \d+- 1 位或多位数字
  • (?:\.\d{1,4})?- a 的可选序列,.然后是 1、2、3 或 4 位数字
  • $- 字符串结束。

推荐阅读