Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
REGEX适用于不使用“信用卡”的信用卡;或;_Regex - Fatal编程技术网

REGEX适用于不使用“信用卡”的信用卡;或;

REGEX适用于不使用“信用卡”的信用卡;或;,regex,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} 我只得到

我知道某些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
作为返回。应该是
|
作为

顺便说一句,所有CC都需要一个正则表达式。
我做错了什么?

插入符号是字符串的开头,管道是交替运算符,这是正确的。但是,只有在启用详细/注释/自由空间模式时,内部空间才不重要

更安全的做法是删除这些空格,并添加线端锚点(
$
):


插入符号是字符串的开头,管道是交替运算符,这是正确的。但是,只有在启用详细/注释/自由空间模式时,内部空间才不重要

更安全的做法是删除这些空格,并添加线端锚点(
$
):

另外,对于您的场景,理解和改进regexs的一个好方法是使用debuggex之类的工具

因此,如果我使用你的表达,你可以很容易地看到你的问题。例如,您的表达式就是这样:

如您所见,这里有一些空格(以
\uu
显示)。显然有一些打字错误

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

^(?: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})$

另外,对于您的场景,理解和改进Regex的一个好方法是使用debuggex之类的工具

因此,如果我使用你的表达,你可以很容易地看到你的问题。例如,您的表达式就是这样:

如您所见,这里有一些空格(以
\uu
显示)。显然有一些打字错误

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

^(?: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})$

很可能是空格杀死了它。您确定最后不需要
$
?试试
^(?: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}$
表达式中有空格。您的regexp库是否将空格视为要匹配的字符?正如前面的评论所述,您需要同步搜索模式,并使用
^
$
(它可能匹配行的开始/结束或根据设置/实施传递给图书馆匹配功能的完整文本的开始/结束)Visa卡号可以是13或16位。这就是为什么最后3位数字被分成各自的组,因此可以将其设置为可选:
(?:[0-9]{3})?
。很可能是空格将其扼杀。您确定结尾也不需要
$
?试试
^(?: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}$
表达式中有空格。您的regexp库是否将空格视为要匹配的字符?正如前面的评论所述,您需要同步搜索模式,并使用
^
$
(它可能匹配行的开始/结束或根据设置/实施传递给图书馆匹配功能的完整文本的开始/结束)Visa卡号可以是13或16位。这就是为什么最后3位数字被分成各自的组,这样它们就可以成为可选的:
(?:[0-9]{3})?
。在阅读了您答案的第一部分后,我得到了一个印象,即
\uu
表示debuggex:)上的用户错误,而图上的空格就是这样显示的。我不知道这个工具。如果有什么不对劲,这确实有助于形象化。这些空间从来没有困扰过我。谢谢你的解释和帮助!在阅读了答案的第一部分后,我得到了一个印象,即
\u
表示debuggex:)上的用户错误,而图中的空格是这样显示的。我不知道这个工具。如果有什么不对劲,这确实有助于形象化。这些空间从来没有困扰过我。谢谢你的解释和帮助!