js正则手机号号身份证号脱敏

// 手机号脱敏
function maskPhoneNumber(phoneNumber) {
  if (!phoneNumber || phoneNumber.length !== 11) {
    return phoneNumber
  }

  // 使用正则表达式替换中间四位
  const masked = phoneNumber.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')

  return masked
}


// 判断是否是手机号
function isPhoneNumber(tel) {
  var reg = /^0?1[1|2|3|4|5|6|7|8|9][0-9]\d{8}$/
  return reg.test(tel)
}


  maskedCertNo() {
      const reg = /^(.{6})(?:\d+)(.{4})$/ // 匹配身份证号前6位和后4位的正则表达式
      const maskedIdCard = this.info.cert_no.replace(reg, '$1******$2') // 身份证号脱敏,将中间8位替换为“*”
      return maskedIdCard
    }

<think>首先,用户的问题是:“我想使用JavaScript手机号码进行脱敏处理请问JavaScript手机号脱敏方法”。根据系统指令,我需要生成相关问题,并使用中文回答。用户提供的引用包括几个JavaScript脱敏方法的例子:-引用[1]:使用substring方法,取出前三位和后四位,中间用*替换。-引用[2]:使用正则表达式替换。-引用[3]:使用循环遍历字符串,保留前三位和后四位。 -引用[4]:使用substring和substr方法。 我的回答需要结构清晰,帮助用户逐步解决问题。我应该基于这些引用提供可靠的脱敏方法。关键点:-手机号码通常11位,但代码应处理不同长度的情况。 -常见策略是保留前三位和后四位,中间部分用*替换。-提供代码示例,并解释其工作原理。 回答结构:1.**介绍脱敏概念**:简要解释什么是手机号脱敏及其重要性。2.**提供方法**:给出几种常见的JavaScript实现方法,包括代码示例。3. **解释和优化**:解释每种方法,讨论其优缺点。 4. **生成相关问题**:在末尾添加相关问题,符合系统指令。 使用LaTeX格式:-行内数学表达式用$...$,但在这个上下文中可能不需要数学表达式,除非涉及计算。-独立公式用$$...$$,但这里没有复杂公式。-确保LaTeX语法正确。添加引用标识: -在引用的段落末尾自然地添加[^1],[^2]等。由于用户提供了引用,我应该引用它们。最终回答:-以中文撰写。 -清晰、可靠。 相关问题: -根据系统指令,生成相关问题,放在“§§相关问题§§”部分。 -问题应基于主题,比如性能、优化、应用场景。相关问题想法: 1.如何优化手机号脱敏的性能? 2.脱敏方法如何处理不同国家的手机号码格式?3.除了手机号码,还有哪些常见的信息需要脱敏?4.脱敏在数据安全中的应用场景?现在,构建回答:###回答主体1. **介绍**:手机号脱敏是为了保护用户隐私,通过隐藏部分数字。常见方法是保留前三位和后四位,中间用星替换。 2. **方法1:使用substring方法**-代码示例:基于引用[1]和[4]。-解释:获取字符串的前三位和后四位,中间用*填充。3. **方法2:使用正则表达式**-代码示例:基于引用[2]。-解释:使用正则匹配和替换。4.**方法3:使用循环**-代码示例:基于引用[3]。-解释:遍历每个字符,保留特定位置的字符。5.**比较和推荐**:讨论哪种方法更高效或易读。推荐使用substring或正则表达式,因为它们更简洁。6.**完整代码示例**:提供一个通用的函数。###代码格式-使用代码块,如示例中所示。###添加引用-在描述方法时,引用相应的来源。###相关问题-在末尾添加3-4个相关问题。</think>### JavaScript 手机号脱敏方法 手机号脱敏是保护用户隐私的重要手段,通过隐藏部分敏感数字(如中间四位),确保数据在显示或传输时不被滥用。以下是几种可靠且高效的 JavaScript 实现方法,基于常见实践和最佳参考方案。所有方法均假设手机号为 11 位标准格式(如 "13812345678"),但包含长度校验以增强鲁棒性。 #### 方法 1:使用 `substring` 和字符串拼接(推荐) 这是最简洁高效的方式,直接截取前三位和后四位,中间用 `*` 填充。适用于大多数场景。 ```javascript function desensitizePhone(phone) { if (typeof phone !== 'string' || phone.length < 7) { return phone; // 长度不足时直接返回原值 } const firstThree = phone.substring(0, 3); // 获取前三位 const lastFour = phone.substring(phone.length - 4); // 获取后四位 return `${firstThree}${'*'.repeat(phone.length - 7)}${lastFour}`; // 中间部分脱敏 } // 测试 console.log(desensitizePhone("13812345678")); // 输出: "138****5678" console.log(desensitizePhone("12345")); // 输出: "12345"(长度不足) ``` - **优点**:代码简洁,性能高(时间复杂度 $O(1)$)。 - **缺点**:对非标准长度手机号处理较简单,需额外校验[^1][^4]。 #### 方法 2:使用正则表达式替换 通过正则匹配实现灵活脱敏,适合需要动态调整脱敏规则的情况(如不同国家的码格式)。 ```javascript function desensitizePhoneRegex(phone) { if (!phone) return ''; return phone.replace(/^(\d{3})(\d+)(\d{4})$/, (_, prefix, middle, suffix) => { return `${prefix}${'*'.repeat(middle.length)}${suffix}`; // 中间部分替换为* }); } // 测试 console.log(desensitizePhoneRegex("13987654321")); // 输出: "139****4321" ``` - **优点**:灵活性强,可扩展其他脱敏规则(如身份证号)。 - **缺点**:正则表达式可能略慢于直接字符串操作(时间复杂度 $O(n)$),需注意异常输入[^2]。 #### 方法 3:使用循环遍历字符 手动遍历字符串,保留前三位和后四位,中间替换为指定字符。适合教学或自定义脱敏逻辑。 ```javascript function desensitizePhoneLoop(phone, maskChar = '*') { if (phone.length < 11) return phone; let result = ''; for (let i = 0; i < phone.length; i++) { result += (i < 3 || i >= phone.length - 4) ? phone[i] : maskChar; // 保留首尾,替换中间 } return result; } // 测试 console.log(desensitizePhoneLoop("13700001111")); // 输出: "137****1111" ``` - **优点**:逻辑清晰,易于自定义脱敏位置。 - **缺点**:性能较低(时间复杂度 $O(n)$),不推荐大数据量场景[^3]。 ### 最佳实践建议 1. **输入校验**:始终检查输入是否为字符串,并处理长度异常(如小于 7 位)。 2. **脱敏字符**:默认使用 `*`,但可通过参数自定义(如 `desensitizePhone(phone, '#')`)。 3. **扩展性**:结合方法 2 的正则,可统一处理其他敏感信息(如身份证、邮箱)[^2][^3]。 4. **安全性**:脱敏仅用于前端展示,敏感数据存储仍需后端加密。 ### 性能比较 | 方法 | 时间复杂度 | 适用场景 | |------------|------------|-------------------| | substring | $O(1)$ | 高性能需求 | | 正则表达式 | $O(n)$ | 灵活规则匹配 | | 循环遍历 | $O(n)$ | 教学或自定义逻辑 | > 引用说明:以上方法综合了常见实现方案,确保代码可靠性和易用性[^1][^2][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值