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

Flutter如何设置文本输入框仅允许输入文本和表情、屏蔽特殊字符

实现方案

你原有配置的问题是正则白名单仅覆盖了英文字母,会把emoji、其他语言的普通文本全部拦截,只需要调整白名单正则的匹配范围,覆盖常规文本字符和全量emoji编码区间即可。

注意:旧版的WhitelistingTextInputFormatter已经在新版本Flutter中废弃,官方推荐替换为FilteringTextInputFormatter.allow,两种写法的正则规则完全通用。

直接可用的代码配置

inputFormatters: [
  // 新版Flutter推荐写法
  FilteringTextInputFormatter.allow(
    RegExp(
      r'[\u4e00-\u9fa5a-zA-Z0-9\s\u200d\uFE0F\u2600-\u27BF\U0001F300-\U0001FAFF]'
    )
  ),
  // 旧版Flutter兼容写法
  // WhitelistingTextInputFormatter(RegExp(r'[\u4e00-\u9fa5a-zA-Z0-9\s\u200d\uFE0F\u2600-\u27BF\U0001F300-\U0001FAFF]'))
],

正则匹配规则说明

各段正则对应的匹配范围:

  • \u4e00-\u9fa5:覆盖所有常用中文字符,不需要支持中文可直接删除
  • a-zA-Z0-9:覆盖所有大小写英文字母、阿拉伯数字
  • \s:匹配空格、换行等常规空白字符,不需要可删除
  • \u200d、\uFE0F:匹配emoji的零宽连接符、变体选择符,是支持组合emoji(带肤色表情、多人物家庭表情等多字符合成表情)的必要匹配项,删除会导致组合emoji输入被截断、显示异常
  • \u2600-\u27BF:覆盖基础符号类emoji,包含天气、星座、棋牌类等基础表情
  • \U0001F300-\U0001FAFF:覆盖补充表情平面的绝大多数emoji,包含人脸、手势、食物、动植物、物品、活动类等常用表情

注意:不要随意删除\u200d和\uFE0F两个匹配规则,否则会导致组合类emoji无法正常输入。

自定义调整方法

  • 如果需要支持日文、韩文等其他语言的普通文本,直接在正则的中括号内追加对应语言的Unicode区间即可
  • 如果需要放行个别业务允许的普通符号(比如逗号、句号、@等),直接把对应字符加入正则中括号即可,例如要允许中英文逗号、句号,正则可调整为:
RegExp(r'[\u4e00-\u9fa5a-zA-Z0-9\s,.,。\u200d\uFE0F\u2600-\u27BF\U0001F300-\U0001FAFF]')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.14 16:15:48