JS笔试题:识别手机号或邮箱并进行脱敏

本文介绍了如何使用JavaScript的正则表达式和replace函数来脱敏手机号和邮箱。对于手机号,需要替换第4位到第8位为星号;对于邮箱,保留首尾字符,其余用星号替换。讲解了replace函数的工作原理,以及正则表达式中的特殊符号和匹配规则。

题目:
 

function parse (str) {
  // TODO
}
console.log(parse(`我叫张三,学号20210101,我的手机号码是13800001234,我的邮箱是abA1_2-4b@qq.com,如对简历感兴趣欢迎邮件联系。`))
// 我叫张三,学号20210101,我的手机号码是 138****1234,我的邮箱是a***b@qq.com,如对简历感兴趣欢迎邮件联系。

脱敏:隐藏字符串中的部分个人敏感信息。

由题上打印的示例可知,首先要找到字符串中的手机号码,并将其第4位到第8位数字用星号代替,然后找到字符串中的邮箱,将@符号前面的字符除第1位和最后1位外的其他字符用星号代替。

- 手机号匹配规则:第1位数一定是1,第二位数是3-9,民用手机号中第二位是没有0-2的,其他号码段均已开放,从第3位到第11位可以是0-9之中的任何一位数。总长度固定为11位。

- 邮箱匹配规则:在第一段可以是大小写字母或数字或_.-符号,中间固定为@,第二段为大小写字母或数字加点再加小写字母。

解答:

function parse (str) {
  return str
      .replace(/1[3-9]\d{9}/g, (phone) => {
          return phone.replace(phone.substring(3, 7), '****')
      })
      .replace(/\w+([-|\.]\w+)*@[\w]+\.[a-z]+/g, (mail) => {
          return mail.replace(/(\w{1}).*(\w{1})@(.*)/, "$1***$2@$3")
      })
  
}

这是其中一种较为简易的解法,其中涉及到的知识点主要是正则表达式和replace函数的使用,在实际工作中能熟练地不查资料地使用正则表达式能提升很多的开发效率。

首先来说一下replace这个函数,这是字符串的一个原型方法,有两个必选参数
`stringObject.replace(regexp/substr, replacement)`
第一个参数可以是字符串/正则表达式,第二个参数是字符串/函数,这里重点讲一下第二个参数,当它为函数时,参数是该replace匹配到的字符串,返回值可替换匹配到的字符串,当它是字符串时,用该字符串替换匹配到的字符串,其中当replace第一个参数为正则,第二个参数为字符串时,在第二个参数中\$符号有特殊意义,如\$1代表你第一个圆括号(即第一个分组)内匹配到的内容,MDN解释如下:

![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4e92fde12afb43c1a43e3ed60d39e367~tplv-k3u1fbpfcp-watermark.image?)

打个比方:
```js
const name = 'Jame, Bob'

console.log(name.replace(/(\w).*/, '$1<---前面是一分组')) // J<---前面是一分组
```
这个正则取到了name变量中的全体字符,而\$1取的是(\w)即J,用J去替代原有的所有字符串,故得出以上结果。其中:
- \w:匹配大小写字符、数字和下划线
- \d:匹配数字
- .:匹配除换行符外的所有字符
- \*:表示该符号前面的这个匹配规则需要匹配0次或无数次
- []:用于编写或的规则模式
- {}:代表需要匹配的长度
- +:表示该符号前面的这个匹配规则需要匹配1次或无数次

更多请关注:JS笔试题:识别手机号或邮箱并进行脱敏 - 掘金

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值