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 合规性正则表达式检测带空格的模式的主要内容,如果未能解决你的问题,请参考以下文章