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 在字符串和掩码中查找信用卡号的主要内容,如果未能解决你的问题,请参考以下文章