Skip to content
扫码开始移动端阅读

字符串脱敏

250
需要≈
1.25
分钟
手撕面试题

需求

字符串脱敏

1 位不脱

2-4位字符:第 1 位脱敏,比如“南山区”脱敏后为“*山区”

5-9 位字符,第 3-5 位字符脱敏,比如“南山区科技二路”脱敏后为“南山***二路”

10 位以上,倒数 3-5 位脱敏,比如“南山区海天二路68爱德华小区”脱敏为“南山区海天二路68***小区”

实现

js
const maskString = (str) => {
    // 辅助函数,用于在指定位置插入掩码
  const maskPart = (str, min, max) => {
    const end = Math.min(max, str.length);
    return str.slice(0, min) + "***" + str.slice(end);
  };

  const length = str.length;
  // 根据字符串长度选择不同的掩码策略
  const funList = {
    [`${length > 9}`]: (str) => maskPart(str, str.length - 8, str.length - 5),
    [`${length <= 9}`]: (str) => maskPart(str, 2, 5),
    [`${length <= 4}`]: (str) => "*" + str.slice(1),
    [`${length === 1}`]: (str) => str,
  };
  return funList[`${true}`](str);
};

结语

感兴趣的小伙伴可以手动实现一下。欢迎贡献更好的解决方案。

上次更新: