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

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

作者: 已不淘气很多年 | 来源:发表于2023-11-28 17:48 被阅读0次

    前两天工作中遇到个需求,需要对字符串进行掩码,字符串长度不等,需要保留前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和正则表达式进行处理,于是又弄了第二种方案。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/lckxgdtx.html