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

2023-11-28  本文已影响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和正则表达式进行处理,于是又弄了第二种方案。

上一篇下一篇

猜你喜欢

热点阅读