You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MM/YY格式银行卡有效期正则验证问题:YY需覆盖19-99

解决银行卡有效期YY部分的正则问题

嘿,我一眼就看出你原正则的问题所在了——主要是分组逻辑错误YY范围的写法不对,才导致出现只认19、还允许三位数字的bug。

原正则的问题拆解

你写的^(0[1-9]|10|11|12)/1[9]|2[0-9]{2}$里,|的位置完全错了:它把整个表达式拆成了两个独立的分支:

  1. 第一个分支:^(0[1-9]|10|11|12)/1[9] → 只能匹配MM/19这种格式
  2. 第二个分支:2[0-9]{2}$ → 甚至不需要前面的MM,直接匹配2xx这种三位数字,完全脱离了银行卡有效期的格式要求

而且你想匹配19-99的两位YY,却写成了1[9]|2[0-9]{2},既把19限定死,又允许了三位数字,完全不符合需求。

修改后的正确正则

^(0[1-9]|1[0-2])/(19|[2-9]\d)$

如果你更习惯把MM的10/11/12单独列出来,也可以写成:

^(0[1-9]|10|11|12)/(19|[2-9]\d)$

正则各部分解释

  • MM部分0[1-9]匹配01-09,1[0-2](或10|11|12)匹配10-12,合起来严格限制MM为01-12,和你原来的逻辑一致。
  • YY部分
    • 19直接匹配最低有效值19
    • [2-9]\d匹配20-99(第一位是2-9,第二位是0-9的任意数字)
      两者用|包裹,确保YY只能是19-99之间的两位数字
  • 首尾锚点^$确保整个输入只能是MM/YY的格式,不允许任何多余的前置/后置字符,彻底解决了输入超过两位数字还能匹配的问题。

验证案例

✅ 有效输入:01/1912/9905/2309/50
❌ 无效输入:00/19(MM非法)、13/20(MM非法)、01/18(YY小于19)、01/05(YY小于19)、01/100(YY三位)、01/9(YY一位)

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

火山引擎 最新活动