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

Mar*_*ebb 3 javascript regex

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

"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"
Run Code Online (Sandbox Code Playgroud)

应转换为:

"Hi here is my card number its visa **** **** **** 4242"
Run Code Online (Sandbox Code Playgroud)

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

我找到了两个正则表达式,但都抛出错误:“未捕获的语法错误:无效或意外的令牌”

"Hi here is my card number its visa 4242 4242 4242 4242".match("(\d{4}-?){4}")
Run Code Online (Sandbox Code Playgroud)

"Hi here is my card number its visa 4242 4242 4242 4242".match(\b4\d{3}[ -]?\d{4}[ -]?\d{4}[ -]?\d{4}[ -]\b)
Run Code Online (Sandbox Code Playgroud)

我认为这些表达式与 JS 不兼容?

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

有人可以帮我解决这个问题的正则表达式部分吗?

ctw*_*els 11

请参阅此处使用的正则表达式

\b(?:\d{4}[ -]?){3}(?=\d{4}\b)
Run Code Online (Sandbox Code Playgroud)
  • \b断言位置作为单词边界。如果您想捕获诸如此类的情况,可以将其删除My visa is1234567812345678
  • (?:\d{4}[ -]?){3} 正确匹配以下 3 次
    • \d{4} 匹配任意数字 4 次
    • [ -]? 可选匹配空格或连字符
  • (?=\d{4}\b)正向预测确保后面的内容是 4 位数字(并确保后面的内容不是单词字符)。与我的第一点类似,捕捉卡号后跟诸如My visa is 1234567812345678please use it carefully, 之类的单词(?=\d{4}(?!\d))

\b(?:\d{4}[ -]?){3}(?=\d{4}\b)
Run Code Online (Sandbox Code Playgroud)