Regex 与信用卡到期日期匹配的正则表达式
我尝试使用以下模式来匹配信用卡到期日期:Regex 与信用卡到期日期匹配的正则表达式,regex,Regex,我尝试使用以下模式来匹配信用卡到期日期: (0[1-9]|1[0-2])\/?(([0-9]{4})|[0-9]{2}$) 我正在测试以下字符串: 02/13 0213 022013 02/2013 02/203 02/2 02/20322 它应该只匹配前四个字符串,后三个字符串不应该匹配,因为它们是无效的。但是,当前模式也与最后一个字符串匹配。我做错了什么?您缺少线锚的开头^,括号不匹配 这应该起作用: re = /^(0[1-9]|1[0-2])\/?([0-9]{4}|[0-9]{2}
(0[1-9]|1[0-2])\/?(([0-9]{4})|[0-9]{2}$)
我正在测试以下字符串:
02/13
0213
022013
02/2013
02/203
02/2
02/20322
它应该只匹配前四个字符串,后三个字符串不应该匹配,因为它们是无效的。但是,当前模式也与最后一个字符串匹配。我做错了什么?您缺少线锚的开头
^
,括号不匹配
这应该起作用:
re = /^(0[1-9]|1[0-2])\/?([0-9]{4}|[0-9]{2})$/;
或使用单词边界:
re = /\b(0[1-9]|1[0-2])\/?([0-9]{4}|[0-9]{2})\b/;
工作演示:右移巴拉那:
^(0[1-9]|1[0-2])\/?(([0-9]{4}|[0-9]{2})$)
结束锚没有应用于[0-9]{4}选项,因此允许使用更多的数字。因为我们讨论的是信用卡到期日期,一旦您使用其他答案中的一个fineregex表达式验证了输入日期字符串,您肯定要确认日期不是过去的 为此:
YYYYMM
。例如:201409
201312
201409 ge 201312
ge
是字符串比较运算符。请注意,如前所述,信用卡通常在到期月份的最后一天到期,因此使用gt
(大于)运营商是不合适的
或者,如果您的语言不支持以这种方式比较字符串,请将两个字符串都转换为整数,然后进行算术比较。也许我有点困惑,但您确定括号中的
[0-9]{4}是否正确
area?@BlackPlanet我对正则表达式不熟悉-括号有什么问题吗?@moby请看下面我的答案。他/她可能不想在他/她的正则表达式中使用起始锚。疯了!为什么主播改变了事情?@BlackPlanet:看工作演示并在那里玩regex。我创建了一个演示,让您更好地理解颜色编码:基本上是可选的/
使其与最后4位数字匹配,而无需锚定^
啊,这很微妙。另一方面,该测试仪令人惊讶。它仍然匹配最后一个字符串。我看到它匹配最后一个字符串的结尾(不是全部)。添加线锚的起点以修复该问题。请参见编辑。