求助:正则替换账号前6位为######、后3位为###时结果异常
问题原因
原代码存在两个核心错误:
- 正则替换时,将匹配到的6位/3位数字仅替换为单个#,而非对应位数的#;
- 额外手动拼接
#####和##属于画蛇添足,直接破坏了替换逻辑。
解决方法
方案一:分两次替换(直观易懂)
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
相关产品推荐
相关产品推荐

