为什么' - '或正则表达式中的数字子组之间的空格失败?

时间:2016-04-06 16:51:03

标签: regex

我正在研究不同类型信用卡的不同号码方案 例如:
    发现:\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

为什么会这样?

1 个答案:

答案 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}

类似的策略可以应用于其他策略。