正则表达式以匹配信用卡到期日期

Sno*_*man 9 regex

我有以下模式,我试图用来匹配信用卡到期日期:

(0[1-9]|1[0-2])\/?(([0-9]{4})|[0-9]{2}$)
Run Code Online (Sandbox Code Playgroud)

我正在测试以下字符串:

02/13
0213
022013
02/2013
02/203
02/2
02/20322
Run Code Online (Sandbox Code Playgroud)

它应该只匹配前四个字符串,最后3个字符串不应该匹配,因为它们无效.但是,当前模式也匹配最后一个字符串.我究竟做错了什么?

anu*_*ava 25

您缺少线锚的起点^和括号是不匹配的.

这应该工作:

re = /^(0[1-9]|1[0-2])\/?([0-9]{4}|[0-9]{2})$/;
Run Code Online (Sandbox Code Playgroud)

或使用单词边界:

re = /\b(0[1-9]|1[0-2])\/?([0-9]{4}|[0-9]{2})\b/;
Run Code Online (Sandbox Code Playgroud)

工作演示:http://regex101.com/r/gN5wH2

  • 啊,这很微妙.在相关的说明,该测试人员是惊人的. (2认同)