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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:05:18