Flutter中如何校验字符串是否为指定格式的代金券码
Flutter 代金券格式校验实现方案
要校验格式为ABCD-ABCD-ABCD-ABCD的代金券码(4组4字母,以短横线分隔),最简洁高效的方式是使用正则表达式搭配Flutter的RegExp类实现。
核心正则表达式
根据需求,正则分为两种场景:
- 允许大小写字母:
^[A-Za-z]{4}-[A-Za-z]{4}-[A-Za-z]{4}-[A-Za-z]{4}$ - 仅允许大写字母:
^[A-Z]{4}-[A-Z]{4}-[A-Z]{4}-[A-Z]{4}$
正则各部分含义:
^:匹配字符串开头[A-Za-z]{4}:匹配4个大小写英文字母(如果限制大写就用[A-Z]{4})-:匹配分隔用的短横线$:匹配字符串结尾
Flutter 实现代码
封装一个工具函数,直接返回校验结果:
bool validateVoucherCode(String code) { // 可选:先去除字符串前后空格,同时替换中间可能的空格(比如用户输入时误加了空格) final cleanedCode = code.trim().replaceAll(' ', ''); // 这里用允许大小写的正则,需要限制大写就替换成对应的正则 final voucherRegex = RegExp(r'^[A-Za-z]{4}-[A-Za-z]{4}-[A-Za-z]{4}-[A-Za-z]{4}$'); return voucherRegex.hasMatch(cleanedCode); }
示例用法
void main() { print(validateVoucherCode('ABCD-ABCD-ABCD-ABCD')); // 输出 true print(validateVoucherCode('abcd-abcd-abcd-abcd')); // 输出 true print(validateVoucherCode('ABCD-ABCD-ABCD-ABC')); // 输出 false(最后一组仅3个字母) print(validateVoucherCode('ABCD ABCD ABCD ABCD')); // 输出 true(自动处理空格) print(validateVoucherCode('1234-ABCD-ABCD-ABCD')); // 输出 false(包含数字) }
额外优化建议
如果需要在用户输入时实时格式化(比如自动插入短横线),可以结合TextInputFormatter实现,但这属于输入辅助功能,核心校验逻辑仍基于上述正则函数。
内容的提问来源于stack exchange,提问作者Ahmad Mostafa
相关产品推荐
相关产品推荐

