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

Flutter正则表达式实现:文本框仅允许数字、字母及日文,屏蔽特殊字符

在Flutter TextField中限制输入为数字、英文字母及日文

要实现TextField仅允许输入数字、英文字母和日文,核心是利用Flutter的FilteringTextInputFormatter结合正则表达式过滤非法字符,以下是具体实现步骤:

1. 导入依赖包

需要导入flutter/services.dart以使用文本输入过滤器:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

2. 定义允许输入的正则表达式

正则需覆盖三类合法字符:

  • 大小写英文字母:a-zA-Z
  • 数字:0-9
  • 日文(平假名、片假名、常用汉字):ぁ-んァ-ン一-龥

对应的正则表达式字符串为:

final RegExp allowedCharsRegExp = RegExp(r'[a-zA-Z0-9ぁ-んァ-ン一-龥]');

3. 配置TextField的输入过滤器

将上述正则传入FilteringTextInputFormatter.allow(),并添加到TextField的inputFormatters列表中:

TextField(
  inputFormatters: [
    FilteringTextInputFormatter.allow(allowedCharsRegExp),
  ],
  decoration: const InputDecoration(
    hintText: "请输入数字、英文字母或日文",
  ),
)

完整示例代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text("输入限制示例")),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: TextField(
            inputFormatters: [
              FilteringTextInputFormatter.allow(RegExp(r'[a-zA-Z0-9ぁ-んァ-ン一-龥]')),
            ],
            decoration: const InputDecoration(
              border: OutlineInputBorder(),
              hintText: "可输入:abc123英語",
            ),
          ),
        ),
      ),
    );
  }
}

效果说明

  • 合法输入如abc123英語可正常输入
  • 非法字符(如!@#$%^&*()等特殊符号)会被自动过滤,无法输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:42:05