我试图只允许数字和点的文本表单字段.我有类似的东西
WhitelistingTextInputFormatter(RegExp("\d*[.]\d*"))
但是不起作用,所以:有没有人知道怎么会只允许数字和点?
6qftjkof1#
由于WhitelistingTextInputFormatter在Flutter 1.20中被弃用,因此FilteringTextInputFormatter可以用于:TextInputFormatter,防止插入符合(或不符合)特定模式的字符。在新TextEditingValue中找到的筛选字符示例将替换为默认为空字符串的replacementString。由于此格式化程序只从文本中删除字符,因此它尝试将现有的TextEditingValue.selection保留为删除字符后的值。使用示例:
WhitelistingTextInputFormatter
FilteringTextInputFormatter
TextField( keyboardType: TextInputType.numberWithOptions(decimal: true), inputFormatters: <TextInputFormatter>[ FilteringTextInputFormatter.allow(RegExp(r'^\d+(?:\.\d+)?$')), ], ),
传统答案
WhitelistingTextInputFormatter“创建一个格式化程序,该格式化程序仅允许插入列入白名单的字符模式”。这意味着您的模式应仅匹配任何1位数或1个点。此外,如果要在正则表达式转义中使用单个反斜杠,则需要使用原始字符串文字。用途
WhitelistingTextInputFormatter(RegExp(r"[\d.]"))
请注意,如果要验证整个输入 * 序列 *,则需要定义validator: validateMyInput,然后添加
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; }
改编自Form Validation in Flutter。
1条答案
按热度按时间6qftjkof1#
由于
WhitelistingTextInputFormatter
在Flutter 1.20中被弃用,因此FilteringTextInputFormatter
可以用于:TextInputFormatter,防止插入符合(或不符合)特定模式的字符。
在新TextEditingValue中找到的筛选字符示例将替换为默认为空字符串的replacementString。
由于此格式化程序只从文本中删除字符,因此它尝试将现有的TextEditingValue.selection保留为删除字符后的值。
使用示例:
传统答案
WhitelistingTextInputFormatter
“创建一个格式化程序,该格式化程序仅允许插入列入白名单的字符模式”。这意味着您的模式应仅匹配任何1位数或1个点。此外,如果要在正则表达式转义中使用单个反斜杠,则需要使用原始字符串文字。
用途
请注意,如果要验证整个输入 * 序列 *,则需要定义
validator: validateMyInput
,然后添加改编自Form Validation in Flutter。