字符串掩码功能(保留前后部分,中间替换为*)

前两天工作中遇到个需求,需要对字符串进行掩码,字符串长度不等,需要保留前3位和后6位,中间全部替换为显示。最开始的想法就是截取前3位和后6位字符,中间根据总长度减去9的部分全部替换为

方法一:根据首尾字符截取,然后将中间字符全部替换为*,最后三个字符拼接

maskString (str, startLength, endLength) {
  if (!str || str.length <= (startLength + endLength)) return str;

  const strLength = str.length;
  const strStart = str.substr(0, startLength);
  const strEnd = str.substr(strLength - endLength, endLength);
  const strMiddle = "*".repeat(strLength - (startLength + endLength)) ;

  return `${strStart}${strMiddle}${strEnd}`;
}

方案二:使用replace和正则表达式进行配合

maskString(str, startLength, endLength) {
  const regexPattern = new RegExp(`^(.{${startLength}})(.*)(.{${endLength}})$`);

  return str.replace(regexPattern, (match, firstLength, middle, lastLength) => {
    const maskedMiddle = '*'.repeat(middle.length);
    return firstLength + maskedMiddle + lastLength;
  });
}

总结:最开始的时候,是直接使用第一种方案(固定写死首尾保留个数),然后里面的首尾长度都固定写死,然后思考了下,这种小需求在项目中可能会有大量使用,而且首尾保留的位数还不一定固定,于是稍作优化,弄完后,又想着用replace和正则表达式进行处理,于是又弄了第二种方案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容