You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中FilteringTextInputFormatter正则表达式为何失效?

Flutter TextField无法输入数字的解决方案

你的问题出在正则表达式和FilteringTextInputFormatter.allow的匹配逻辑不兼容:

  • 原正则^\d+\.?\d{1,2}要求文本必须以至少一个数字开头,后跟可选小数点和1-2位小数,但allow方法的逻辑是允许匹配该正则的字符/子串,而非验证整个文本的完整状态。当你输入第一个数字时,过滤逻辑会误判导致无法输入。

修复方案

1. 调整正则匹配所有合法状态

使用能覆盖所有中间输入场景的正则(包括空、仅整数、整数加小数点、整数加1-2位小数),同时用^和$限定整个文本范围:

FilteringTextInputFormatter.allow(RegExp(r"^\d*\.?\d{0,2}$"));

如果不允许空输入,将\d*改为\d+,强制用户先输入至少一个数字:

FilteringTextInputFormatter.allow(RegExp(r"^\d+\.?\d{0,2}$"));

2. 自定义过滤逻辑(更精准)

如果需要禁止单独输入小数点这类场景,用FilteringTextInputFormatter.withFunction自定义规则:

FilteringTextInputFormatter.withFunction((oldValue, newValue) {
  final text = newValue.text;
  // 禁止纯小数点输入
  if (text == '.') return oldValue;
  // 验证是否符合最多两位小数的规则
  final validPattern = RegExp(r"^\d*\.?\d{0,2}$");
  return validPattern.hasMatch(text) ? newValue : oldValue;
})

内容的提问来源于stack exchange,提问作者ShrimpCrackers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:37:09