我正在研究不同类型信用卡的不同号码方案
例如:
发现:\b6(?:011|5[0-9]{2})[0-9]{12}\b
签证:\b4[0-9]{12}(?:[0-9]{3})\b
大来卡:\b3(?:0[0-5]|[68][0-9])[0-9]{11} \b
有些人喜欢把' - '或者在写信用卡号时,数字子组之间的空格,以及上述RE未能捕获它们
例如:(?:\d[ -]*?){13,16}\b
为什么会这样?
答案 0 :(得分:0)
只需明确询问子组之间的空格/连字符。您没有在原始正则表达中提及它们。例如,对于Discover模式,您给出了:
6(?:011|5[0-9]{2})[0-9]{12}
为简洁起见,我遗漏了\b
。除非我遗漏了某些内容,否则您可以使用\d
代替[0-9]
:
6(?:011|5\d{2})\d{12}
将后12位数字拆分为三组,每组四位:
6(?:011|5\d{2})\d{4}\d{4}\d{4}
然后在空格/连字符之间加上:
6(?:011|5\d{2})[ -]*\d{4}[ -]*\d{4}[ -]*\d{4}
可以像这样表达而不重复:
6(?:011|5\d{2})(?:[ -]*\d{4}){3}
类似的策略可以应用于其他策略。