当前位置: 首页 > 知识库问答 >
问题:

正则表达式匹配信用卡号,除非它们出现在UUID中

赵雪峰
2023-03-14

更笼统地表达这个问题:我如何编写一个与模式匹配的正则表达式,除非它出现在另一个模式中的某个位置?

我有一个正则表达式(见下文)匹配特定的信用卡号码,在数字组之间有或没有破折号/空格。

如果信用卡号出现在从任何位置开始的UUID字符串(形式为“XXXXXXXXX-XXXXX-XXXXX-XXXXXXXXXX”,其中X是任何十六进制数字)中,我想防止匹配。

只有当CC num从UUID中的位置1开始时,负面前瞻才有效,就像常规捕获组一样,所以我希望其他人有替代策略。

Visa卡号的正则表达式组示例:

(4\d{3}(?:[\s_\-\n\r\.]*\d{4}){3})

不应匹配的示例字符串:

uuid1="836ac40c-e6ed-4026-2222-44443333f465" uuid2="46120710-5880-4000-8060-f0fadf056136"

应该匹配的示例字符串:

4026-2222-44443333
46120710-5880-4000
4111222233334444
4999-8888-7777-6666

由于处理信用卡号的PCI合规性规则,我们试图严格检测任何字符串中的数字,除非该字符串是绝对安全的(例如UUID)。

正在使用的正则表达式引擎支持环顾和反向引用,但不支持条件。

共有1个答案

丌官嘉良
2023-03-14

只需使用锚或单词边界:

/\b(4\d{3}(?:[\s._-]*\d{4}){3})\b/

还要注意,我将[\s_\-\n\r\.]简化为[\s._-]

 类似资料:
  • 除非x后面跟了另一个x,否则我怎样才能在右边匹配任意数量的空白呢? 到目前为止,我有: 但显然,即使文本是“xx”,这仍然会捕获。我如何让这个捕获“xaldkfjda”、“x”、“x adkf”等,但不是“xxaldkfjdlk”、“xx”等中的第一个x? 编辑:最后一句的结尾应该是“…但不是前两个x在:‘xxaldkfjdlk’,‘xx’等?”简而言之,我想抓住一个“x”,但从来没有两个“x”并

  • 问题内容: 我有类似的东西 商店 结束行像1商店..我想匹配,它使用python正则表达式。 我尝试了类似的方法, 但是没有用。 编辑:添加代码,我试过 请帮助。 谢谢吉乔 问题答案: 或多或少直接回复您的评论 尝试这个 解决方案是使用,而不是使用后者,因为后者试图将整个字符串与regexp匹配,而前者只是试图在字符串内部查找与表达式匹配的子字符串。

  • 出于某种原因,上面的正则表达式没有捕捉带撇号的名称。 例如:D'STALL先生不匹配。任何关于regex模式的帮助都将不胜感激。 代码所做的是获取输入并用XML标记它。诸如以下内容: 正则表达式与上述段落不匹配。

  • 问题内容: 匹配字符串中的’(’的正则表达式是什么? 以下是场景: 我有一串 我想使用正则表达式拆分字符串。为此,我正在使用 但是我收到以下异常。 转义似乎不起作用。 问题答案: 两种选择: 首先,你可以使用转义 回 斜线- 另外,由于它是单个字符,因此您可以将其放入不需要转义的字符类中-

  • 我们得到了一些这样的内容:

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。