regex - 十进制数的正则表达式在颤动的TextFormField inputFormatters中不起作用
问题描述
正则表达式的要求:
- 数字的最大长度为 12 个字符
- 如果数字中有小数点,则用户可以在小数点后添加最多 4 位,最少 1 位。
- 有效输入:- 222244445555、22223333.3333、5555.33、1.2、0.33、11112222333.3
- 无效输入:22., .11, 2222333344443,444445555544.,333344445.1234
我试图在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
.
解决方案
请注意,如果要验证整个输入序列,则需要定义 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 位数字$
- 字符串结束。
推荐阅读
- linux - 显示屏幕的完整历史记录
- c# - 如何使刚体 2D 沿用户滑动的方向移动?
- android - 类型可能只包含一个@Inject 错误,有什么问题?
- javascript - 包含要转换的特殊十六进制的字符串
- javascript - 如何加深html表格中重叠单元格的颜色
- java - 如何使用java进行子字符串和连接
- python - 您能否在使用模板化 SQL 查询时简化查询
- ios - iPhone/iPad 上的谷歌浏览器不支持下载 csv 文件然后将其保存到我的设备
- excel - 计算包含相同文本字符串的列中的不同值
- amazon-web-services - AWS 无服务器应用程序模型 (SAM) 双交叉嵌套堆栈参考