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
相关产品推荐
相关产品推荐

