十进制数的Regex在flutter TextFormField inputFormatters中不起作用。

问题描述 投票:0回答:1

对Regex的要求。

  • 数字的最大长度为12个字符
  • 如果数字中有小数点,那么用户可以在小数点后最多添加4位数字,最少添加1位数字。
  • 有效输入:- 222244445555,2223333.3333,5555.33,1.2,0.33,11112222333.3。
  • 有效输入:22.,.11,222333344443,444445555544.,333344445.1234。

我曾试图为同样的问题生成regex。RegExr 并且它满足了我的要求,但是当我应用同样的方法来处理flutter form TextFormField时,它不能工作。

Regex: ^[[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。

注意,用户不能在TextFormield中输入超过一个小数点的数字。 用户不应该能够在 TextFormField.

regex flutter dart regex-group
1个回答
3
投票

注意,如果你想验证整个输入的内容 顺序 你需要定义一个 validator: 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;
  }

详情请看 翩翩中的表格验证.

该词条为

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

请看 其演示. 详情

  • ^ - 弦首
  • (?=\D*(?:\d\D*){1,12}$) - 字符串中必须有一至十二位数字。
  • \d+ - 1个或多个数字
  • (?:\.\d{1,4})? - 择序 . 然后是1、2、3或4位数。
  • $ - 字符串的末端。
© www.soinside.com 2019 - 2024. All rights reserved.