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

求助:正则替换账号前6位为######、后3位为###时结果异常

问题原因

原代码存在两个核心错误:

  1. 正则替换时,将匹配到的6位/3位数字仅替换为单个#,而非对应位数的#;
  2. 额外手动拼接#####和##属于画蛇添足,直接破坏了替换逻辑。
解决方法

方案一:分两次替换(直观易懂)

function maskAccount(n) {
  let str = n.toString();
  // 替换前6位为6个#
  str = str.replace(/^\d{6}/, '######');
  // 替换最后3位为3个#
  str = str.replace(/\d{3}$/, '###');
  return str;
}

示例:输入1234565225789,返回结果为######5225###。

方案二:单次正则+替换函数(简洁高效)

利用正则匹配所有需要替换的片段,通过替换函数根据匹配内容的长度生成对应数量的#:

function maskAccount(n) {
  const str = n.toString();
  return str.replace(/(^\d{6})|(\d{3}$)/g, match => '#'.repeat(match.length));
}
原代码出错逻辑拆解

原代码中replace(regex,'#')会把匹配到的6位数字替换成1个#,3位数字也替换成1个#,假设原账号是1234565225789,第一步替换后得到#5225#,再手动拼接#####和##,最终结果完全偏离预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:42:51