信用卡的REGEX不与"或"

时间:2016-05-29 19:53:06

标签: regex

我知道某些CC的正则表达式是:

  • 签证:^4[0-9]{12}(?:[0-9]{3})
  • 万事达卡:^5[1-5][0-9]{14}
  • 美国运通:^3[47][0-9]{13}
  • 大来俱乐部:^3(?:0[0-5]|[68][0-9])[0-9]{11}

如果我单独尝试,他们就会工作 但是如果我做的话

^4[0-9]{12}(?:[0-9]{3}) | ^5[1-5][0-9]{14} | ^3[47][0-9]{13} | ^3(?:0[0-5]|[68][0-9])[0-9]{11}

我只获得false作为回报。应该|OR
顺便说一下,所有CC都需要一个正则表达式。 我做错了什么?

2 个答案:

答案 0 :(得分:2)

插入符号是字符串的开头,管道是交替操作符是正确的。但是,当启用VERBOSE / comment / freespace模式时,内部空间只是无关紧要。

删除这些空格更安全,并添加行结束锚($):

^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])‌​[0-9]{11})$

答案 1 :(得分:2)

除了Wiktor Stribiżew回答之外,对于你的场景,理解和改进正则表达式的一个很好的方法是使用像debuggex这样的工具。

因此,如果我使用您的表达式,您可以轻松地看到您遇到的问题。例如,您的表达式就是这种情况:

Regular expression visualization

如您所见,有一些空格(用_显示)。显然有一些错别字。

因此,您可以使用以下方法改进和修复正则表达式:

^(?:4[0-9]{15}|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])‌​[0-9]{11})$

Regular expression visualization