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

Posted

技术标签:

【中文标题】PCI 合规性正则表达式检测带空格的模式【英文标题】:PCI Compliance regex detect pattern with spaces 【发布时间】:2016-03-01 00:49:33 【问题描述】:

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

4320 7589 9456 0123

正则表达式是:

4\d3(\s+|-)?\d4(\s+|-)?\d4(\s+|-)?\d4

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

4 320 7589 9456 0123

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

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
4320$7589$9456$0123
4320_7589_9456_0123

我不知道我是否可以从模式中去除任何空格、符号来分析文本?

【问题讨论】:

试试^4(?:\D*\d)15$ \s 也将匹配新行。 PCI合规性?看到这个我有点担心…… @stribizhev 效果很好!不匹配组但没关系,因为模式匹配。 @HamZa 好吧,当我们谈到数据丢失时,当您看到有人窃取信用卡信息时,这真的很令人不安。 该数据永远不应该以明文形式存在,如果存在则不合规。 【参考方案1】:

我发帖是因为您实际上要求使用模式来匹配第一个 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)$),但子匹配仍会包含中间数字的“垃圾”。

【讨论】:

以上是关于PCI 合规性正则表达式检测带空格的模式的主要内容,如果未能解决你的问题,请参考以下文章

英尺和英寸的正则表达式 - 带小数和分数

带有空格的英国邮政编码的Java正则表达式[重复]

正则表达式查找带空格的整数中的无效字符

带空格的英国邮政编码正则表达式

正则表达式,检测字符串中没有空格

正则表达式捕获引号内和带/不带空格的数字