对Regex的要求。
我曾试图为同样的问题生成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
.
注意,如果你想验证整个输入的内容 顺序 你需要定义一个 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位数。$
- 字符串的末端。