You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式匹配指定范围字符并替换实现银行卡号脱敏?

方案1:零宽断言正则(最贴合你现有代码写法)

你可以直接用带正向肯定后行断言和正向肯定先行断言的正则,精准匹配前4位之后、后4位之前的每一位数字:

const hide = card => card.replace(/(?<=\d{4})\d(?=\d{4})/g, 'X')

测试效果:输入12345678901234,输出结果就是你要的1234XXXXXX1234。

正则说明:

  • (?<=\d{4}):后行断言,要求匹配的数字前面必须有4位数字
  • \d:匹配1位待替换的中间数字
  • (?=\d{4}):先行断言,要求匹配的数字后面必须还有4位数字
  • 加全局修饰符g,匹配所有符合要求的中间位,每一位都会被替换成X

方案2:捕获分组写法(兼容性更好,适配不支持后行断言的旧运行环境)

如果你的运行环境不支持ES2018之后才引入的后行断言,可以用捕获分组的方式实现:

const hide = card => card.replace(/^(\d{4})\d*(\d{4})$/, (_, first4, last4) => 
  `${first4}${'X'.repeat(card.length - 8)}${last4}`
)

说明:

  • 先捕获前4位和后4位到分组1和分组2
  • 中间部分的长度等于总长度减8,直接生成对应长度的X字符串拼接即可

注意事项

以上实现默认传入的银行卡号是纯数字格式、且长度大于等于8位,如果有格式校验需求可以先加一层判断,比如先判断/^\d{8,}$/.test(card)再做脱敏,避免异常输入报错。

内容的提问来源于stack exchange,提问作者akko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 13:15:08