Javascript REGEX 在字符串和掩码中查找信用卡号

Posted

技术标签:

【中文标题】Javascript REGEX 在字符串和掩码中查找信用卡号【英文标题】:Javascript REGEX to find credit card number in string and mask 【发布时间】:2018-07-13 04:39:16 【问题描述】:

我想搜索一个字符串并屏蔽信用卡以确保安全。

"Hi here is my card number its visa 4242 4242 4242 4242"
"Hi here is my card number its visa 4242424242424242"
"Hi here is my card number its visa 4242-4242-4242-4242"

应转换为:

"Hi here is my card number its visa **** **** **** 4242"

我需要用 javascript 在客户端上执行此操作。我知道网络上有很多资源和问题。

我找到了两个正则表达式,但都抛出错误:“Uncaught SyntaxError: Invalid or unexpected token”

"Hi here is my card number its visa 4242 4242 4242 4242".match("(\d4-?)4")

"Hi here is my card number its visa 4242 4242 4242 4242".match(\b4\d3[ -]?\d4[ -]?\d4[ -]?\d4[ -]\b)

我觉得表达式和JS不兼容?

我也知道他们会返回字符串,然后我会转换字符串(屏蔽它),然后对原始字符串使用简单的替换。

谁能帮我解决这个问题的正则表达式部分?

【问题讨论】:

你应该看看javascript中正则表达式的语法:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… regex101.com 有人能解释为什么这些问题被否决了吗?在 SO 上提出任何问题似乎越来越难,有人可以解释一下这个问题在哪里没有得到批准吗? @MartinWebb 我也不确定。您遇到的原始问题是 \d 无效。你需要逃离\。除了您需要将模式包装在/ 中之外,第二个示例还可以工作。此外,[ -]\b 在您的情况下不会匹配任何内容,因为 \b 匹配单词字符和非单词字符(或行首/行尾)之间的位置。老实说,我认为您的问题被否决了 1. 没有使用降价(我编辑了您的问题以使其更清晰)和/或 2. 因为人们 assume 每个人都应该知道您需要逃避@ 987654333@ 或分隔正则表达式模式 @KyleFairns 我同意你的观点。想看整洁的吗? ***.com/questions/30791292/… 68 票反对。 【参考方案1】:

正则表达式可以作为字符串".." 或正则表达式对象/../ 传递。 (当作为字符串传递时,它会像 new RegExp("..") 一样转换为 RegExp 对象)。

在第一种情况下,由于双引号之间的特殊含义,反斜杠必须加倍。

 "Hi here is my card number its visa 4242 4242 4242 4242".match("\\b(\\d4[- ]?)4")

 "Hi here is my card number its visa 4242 4242 4242 4242".match(/\b(\d4[- ]?)4/)

【讨论】:

否决我的回答是关于语法问题,OP 不知道【参考方案2】:

See regex in use here

\b(?:\d4[ -]?)3(?=\d4\b)
\b 将位置断言为单词边界。如果您想捕获 My visa is1234567812345678 等案例,您可以删除它 (?:\d4[ -]?)3 准确匹配以下 3 次 \d4 匹配任意数字 4 次 [ -]? 可选择匹配空格或连字符 (?=\d4\b) 正向前瞻确保后面是 4 位数字(并确保后面不是单词字符)。与我的第一点类似,捕捉卡号后跟诸如My visa is 1234567812345678please use it carefully 之类的词,请改用(?=\d4(?!\d))

const r = /\b(?:\d4[ -]?)3(?=\d4\b)/gm
const a = [
  "Hi here is my card number its visa 4242 4242 4242 4242",
  "Hi here is my card number its visa 4242424242424242",
  "Hi here is my card number its visa 4242-4242-4242-4242"
]
const subst = `**** **** **** `

a.forEach(function(s) 
  console.log(s.replace(r, subst))
)

【讨论】:

我很困惑为什么人们会在社区乐于解决问题时提出问题并投反对票。你的回答很完美——谢谢。 @MartinWebb 不用担心!我很高兴能帮上忙:)

以上是关于Javascript REGEX 在字符串和掩码中查找信用卡号的主要内容,如果未能解决你的问题,请参考以下文章

如何从本地接口获取所有地址和掩码?

在 Python 中从 IP 地址和掩码长度获取 IP 掩码

掩码数组函数-用于设置默认数组结构和掩码

PHP 掩码数组函数 - 用于设置默认数组结构和掩码

如何调整图像分割蒙版的大小?

在 Java 代码中获取错误以查找有关子网和掩码的信息 [重复]