我希望将文本表单字段限制为只允许输入数字和小数点。
我有类似这样的代码:
WhitelistingTextInputFormatter(RegExp("\d*[.]\d*"))
但是不起作用,那么:有人有想法如何只允许数字和点号吗?
WhitelistingTextInputFormatter
已被弃用,可以使用FilteringTextInputFormatter
:
一个TextInputFormatter,它防止插入与特定模式匹配(或不匹配)的字符。
在新的TextEditingValue中发现的过滤字符实例将被替换为replacementString(默认为空字符串)。
由于此格式化程序仅从文本中删除字符,因此它尝试保留现有TextEditingValue.selection到值,以便其偏移的位置与已删除的字符相同。
示例用法:
TextField(
keyboardType: TextInputType.numberWithOptions(decimal: true),
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.allow(RegExp(r'^\d+(?:\.\d+)?$')),
],
),
已有的回答
WhitelistingTextInputFormatter
"创建了一个只允许插入白名单字符模式的格式化程序"。这意味着您的模式应该仅匹配任何1位数字或1个点。
此外,如果您要使用正则表达式转义和单个反斜杠,请使用原始字符串文字。
使用
WhitelistingTextInputFormatter(RegExp(r"[\d.]"))
请注意,如果您想验证整个输入序列,您需要定义一个validator: validateMyInput
,然后添加。
String validateMyInput(String value) {
Pattern pattern = r'^\d+(?:\.\d+)?$';
RegExp regex = new RegExp(pattern);
if (!regex.hasMatch(value))
return 'Enter Valid Number';
else
return null;
}
修改自Flutter中的表单验证.