如何为指定数字规则创建FilteringTextInputFormatter正则表达式?
解决方案
核心规则梳理
需要满足的格式要求:
- 整数部分必须为 2-3位数字(禁止1位或0位)
- 可选小数点,小数点后最多允许 2位数字(可输入1位或2位,也可以不带小数点)
正确的正则表达式
替换原正则为以下表达式,它既支持合法的最终输入状态,也允许输入过程中的临时有效状态(比如先输入单个数字,再补全到2位),同时直接禁止无效的输入操作(比如单个数字后加小数点):
RegExp(r'^\d{1,3}$|^\d{2,3}\.\d{0,2}$')
完整TextField代码
TextField( keyboardType: TextInputType.number, inputFormatters: [ FilteringTextInputFormatter.allow( RegExp(r'^\d{1,3}$|^\d{2,3}\.\d{0,2}$'), ), ], )
正则说明
^\d{1,3}$:允许输入1-3位纯数字(支持输入过程中从1位补到2-3位的临时状态)^\d{2,3}\.\d{0,2}$:允许2-3位数字后接小数点,小数点后可输入0-2位数字(包含只输入小数点但还没输小数位的临时状态,以及完成的小数格式)
设置后会直接禁止以下无效操作:
- 直接输入小数点(
.1、.12) - 单个数字后输入小数点(
1.、1.1、1.12) - 整数部分超过3位数字
内容的提问来源于stack exchange,提问作者Shubham Hande
相关产品推荐
相关产品推荐

