我想搜索一个字符串并屏蔽信用卡以确保安全。
"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)