Flutter中如何从GST号码提取PAN号码?
Flutter从GST号码中自动提取PAN号码并填充到文本框
以下是实现从用户输入的GST号码中提取PAN号码,并自动填充到对应文本框的完整代码逻辑:
1. 定义文本控制器
首先定义两个TextEditingController,分别绑定GST输入文本框和PAN显示文本框,同时声明变量存储提取到的PAN号码:
TextEditingController gstController = TextEditingController(); TextEditingController panController = TextEditingController(); String _panNumber = '';
2. PAN号码提取与更新逻辑
提取PAN的核心方法
通过正则表达式匹配PAN号码的格式(5位大写英文字母 + 4位数字 + 1位大写英文字母),从输入的GST字符串中提取符合格式的PAN号码:
String extractPANNumber(String input) { // PAN号码的正则匹配规则 RegExp panRegex = RegExp(r'[A-Z]{5}[0-9]{4}[A-Z]{1}'); Iterable<Match> matches = panRegex.allMatches(input); // 返回第一个匹配到的PAN号码,无匹配则返回提示文本 return matches.firstOrNull?.group(0) ?? '未找到PAN号码'; }
更新PAN显示的方法
调用提取方法获取PAN号码后,通过setState更新状态,并将结果赋值给PAN文本控制器,实现自动填充:
void _updatePAN(String gstNumber) { String panNumber = extractPANNumber(gstNumber); setState(() { _panNumber = panNumber; panController.text = panNumber; }); print('提取的PAN号码:${panController.text}'); }
3. 释放控制器资源
在组件销毁时,务必销毁文本控制器,避免内存泄漏:
@override void dispose() { gstController.dispose(); panController.dispose(); super.dispose(); }
界面使用示例
将控制器绑定到对应的文本框,并监听GST输入框的内容变化,实时触发PAN提取:
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('GST转PAN工具')), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ TextField( controller: gstController, onChanged: _updatePAN, decoration: const InputDecoration( labelText: '请输入GST号码', border: OutlineInputBorder(), ), textCapitalization: TextCapitalization.characters, // 自动转为大写,适配PAN格式 ), const SizedBox(height: 16), TextField( controller: panController, decoration: const InputDecoration( labelText: '提取的PAN号码', border: OutlineInputBorder(), ), enabled: false, // 设置为不可编辑,仅作显示 ), ], ), ), ); }
内容的提问来源于stack exchange,提问作者Nirav Thummar
相关产品推荐
相关产品推荐

