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

Flutter TextField如何限制用户输入:首字符为0、次字符为3或4

Flutter TextField 输入格式限制实现方案

需求说明

限制输入格式为:第一个字符必须是0,第二个字符必须是3或4,仅允许输入数字,总长度不超过12位。

正确实现方式

通过FilteringTextInputFormatter.allow配合正确的正则表达式,限定符合要求的输入内容。修改后的代码如下:

TextFormField(
  textAlign: TextAlign.center,
  enableSuggestions: false,
  autocorrect: false,
  maxLength: 12,
  inputFormatters: [
    FilteringTextInputFormatter.digitsOnly, // 先限制仅输入数字
    // 再限制格式:开头为0,第二个字符可选3/4,后续最多10位数字(总长度不超12)
    FilteringTextInputFormatter.allow(RegExp(r'^0[34]?[0-9]{0,10}$')),
  ],
  keyboardType: TextInputType.number,
)

正则说明

r'^0[34]?[0-9]{0,10}$'的匹配规则:

  • ^0:强制第一个字符为0
  • [34]?:第二个字符可选(输入过程中允许只输入0),若输入则必须是3或4
  • [0-9]{0,10}:后续可输入0-10位数字,保证总长度不超过12位
  • $:匹配字符串结尾,确保整个输入符合规则

原代码失效原因

你之前添加的规则存在两个核心问题:

  1. 方法使用错误:FilteringTextInputFormatter.deny是拒绝匹配正则的内容,而你的需求是仅允许符合规则的输入,应该用allow方法。
  2. 正则表达式错误:r'^(?:[0][3-4])?[0-9]{12}$'的逻辑完全不符合需求,它匹配的是「12位任意数字」或「03/04开头加12位数字(总长度14)」,既没限制首字符为0,也无法在输入过程中逐步校验格式,自然起不到限制作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:41:13