我想验证格式为MM/YY
的卡过期日期,MM
的值应从01
到12
,YY
的值从19
到99
。
这是我的代码:
^(0[1-9]|10|11|12)/1[9]|2[0-9]{2}$
MM
部分似乎工作得很好,但YY
没有。它只将19
视为有效,但如果我在之后添加新的数字,它就会说它是有效的。
由于{2}
,我希望不验证YY
是否有超过2个数字。
应如何更改以验证从19
到99
的所有年份?
这可能适合您的需求:
^(?: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])$