带空格的 PCI 合规性正则表达式检测模式

PCI Compliance regex detect pattern with spaces

我必须生成一个正则表达式来检测涉及信用卡号的文本模式,我有一个正则表达式,但是当文本在文本之间用简单的 spaces 更改时失败,例如 (信用卡号无效):

4320 7589 9456 0123

正则表达式是:

4\d{3}(\s+|-)?\d{4}(\s+|-)?\d{4}(\s+|-)?\d{4}

这个正则表达式匹配很容易,但是如果有人在任何数字之间用 spaces 更改文本,如下所示:

4 320 7589 9456 0123

不匹配,我需要一个正则表达式来检测任何可能带有 space 的变量、特殊符号、字母、一些示例:

43 20 75 89 94 56 01 23
4 3 2 0 7 5 8 9 9 4 5 6 0 1 2 3
4320a7589b9456c0123
4320895623
4320_7589_9456_0123

我不知道是否可以从模式中剥离任何 space 符号来分析文本?

我发帖是因为您实际上寻求有关模式的帮助,以匹配第一个 4 和另外 15 个数字之间的任意数量的非数字。

模式是

^4(?:\D*\d){15}$

demo

正则表达式细分:

  • ^ - 字符串开头
  • 4 - 文字 4
  • (?:\D*\d){15} - 出现 15 次......
    • \D* - 0 个或多个非数字符号之前..
    • \d - 一个数字
  • $ - 字符串结尾

如果需要捕获,可以捕获(如^4((?:\D*\d){3})((?:\D*\d){4})((?:\D*\d){4})((?:\D*\d){4})$),但子匹配仍将包含"junk"中间数字。