一、前言
使用字符串操作技巧如正则表达式对手机号和身份证号进行星号替换,实现数据隐私保护。
二、解决方式
slice()实现
1 2 3 | let str = '15656781234' let enStr = str . slice ( 0 , 3 ) + '****' + str . slice ( str .length - 4 ) console.log(enStr) / / 156 * * * * 1234 |
substring()实现
1 2 3 | let str = '15656781234' let enStr = str .substring( 0 , 3 ) + '****' + str .substring( str .length - 4 ) console.log(enStr) / / 156 * * * * 1234 |
正则实现
1 2 3 4 5 6 7 | let str = '15656781234' / / 第一种 let enStr = str .replace( / (d{ 3 })d * (d{ 4 }) / , "$1****$2" ); console.log(enStr) / / 156 * * * * 1234 / / 第二种 let enStr = str .replace( / ^(.{ 8 })(?:d + )(.{ 4 })$ / , "$1******$2" ); console.log(enStr) / / 156 * * * * 1234 |
三、简单封装及代码解析
说明
处理电话号码、身份证号码、姓名、邮箱地址和银行卡号等数据类型的脱敏需求。
参数说明
data: 需要脱敏的数据,可以是字符串或数字,尽量处理成字符串,避免丢失精度。
flag: 指定数据类型,用于选择不同的脱敏策略。支持的值包括:
-
'tel'
: 电话号码 -
'identity'
: 身份证号码 -
'name'
: 姓名 -
'email'
: 邮箱地址 -
'bank'
: 银行卡号
befor: 脱敏前段保留的字符数量,可以是字符串或数字。
after: 脱敏后段保留的字符数量,可以是字符串或数字。
注:
有毒,食用前注意解读
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function dataDesensitization(data, flag, befor, after) { let str = data + ''; if (flag = = = 'tel' ) { / / let reg = new RegExp(`(d{${ befor?befor: 3 }})d * (d{${ after?after: 3 }})`); return str .replace(new RegExp(`(d{${ befor?befor: 3 }})d * (d{${ after?after: 3 }})`), "$1****$2" ); } else if (flag = = = 'identity' ) { return str .replace(new RegExp(`(d{${ befor?befor: 1 }})d * (d{${ after?after: 1 }})`), "$1***********$2" ); } else if (flag = = = 'name' ) { return str . slice ( 0 , 1 ) + ( '*' ).repeat( str .length - 1 ); } else if (flag = = = 'email' ) { if ( str .lastIndexOf( '@' ) ! = - 1 ) { return str . slice ( 0 , befor ? befor : 1 ) + '******' + str . slice ( str .lastIndexOf( '@' )); } } else if (flag = = = 'bank' ) { return str .substring( 0 , befor ? befor : 4 ) + '*********' + str .substring( str .length - (after ? after : 3 )); } } console.log(dataDesensitization( 19512345678 , 'tel' , '3' , 4 )); / / 195 * * * * 5678 console.log(dataDesensitization( 123456787654328 , 'identity' )); / / 1 * * * * * * 0 console.log(dataDesensitization( '张三丰' , 'name' )); / / 张 * * console.log(dataDesensitization( '66234567876543729' , 'bank' )); / / 6623 * * * * * * * * 729 console.log(dataDesensitization( '1581234556@qq.com' , 'email' )); / / 1 * * * * * * @qq.com |
到此这篇关于JavaScript实现数据脱敏的三种解决方式的文章就介绍到这了,更多相关JavaScript数据脱敏内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!