我知道某些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都需要一个正则表达式。
我做错了什么?
答案 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这样的工具。
因此,如果我使用您的表达式,您可以轻松地看到您遇到的问题。例如,您的表达式就是这种情况:
如您所见,有一些空格(用_
显示)。显然有一些错别字。
因此,您可以使用以下方法改进和修复正则表达式:
^(?: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})$