YY大于或等于当年的验证MM/YY的正则表达式



我想验证格式为MM/YY的卡过期日期,MM的值应从0112YY的值从1999

这是我的代码:

^(0[1-9]|10|11|12)/1[9]|2[0-9]{2}$

MM部分似乎工作得很好,但YY没有。它只将19视为有效,但如果我在之后添加新的数字,它就会说它是有效的。

由于{2},我希望不验证YY是否有超过2个数字。

应如何更改以验证从1999的所有年份?

这可能适合您的需求:

^(?:0[1-9]|1[0-2])/(?:19|[2-9][0-9])$

演示:https://regex101.com/r/FrZJKU/1

说明:

^               Line start with...
(?:            > Start non-capturing group
0[1-9]      January to September
|     OR
1[0-2]      October to December
)             > End non-capturing group
/              literal '/'
(?:           > Start non-capturing group
19         literal '19'
|        OR
[2-9][0-9] 20 to 99
)             > End non-capturing group
$               line must end with 20 to 99

首先,年份部分缺少一组括号,因此|运算符将拆分整个模式,如下所示:

  • ^(0[1-9]|10|11|12)/1[9]
  • 2[0-9]{2}$

其次,您的年份模式要求2后跟2位数字({2}修饰符(,因此将匹配200、299等。您实际上想要2到9之间的一位数字后跟0到9的一位位数:[2-9][0-9]

最后,没有必要在9周围加上方括号;这没关系,但它让阅读变得更加困难。

将这些修复放在一起:

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

相关内容

  • 没有找到相关文章

最新更新