JS 正则表达式 隐藏数据

前端项目中需要正则表达式处理 业务数据,对姓名 身份证号 手机号 银行卡号 车牌号 邮箱号做隐藏处理,下面记录实现方法 。

一、简单的查阅正则语法

固定格式:/表达式 /修饰符 

修饰符可有,可没有,也可组合,有三种

       全局匹配,即是匹配一个后继续匹配,直到结束g;

        忽略大小写匹配i;

        多行匹配,即是遇到换行后不停止匹配,直到结束m

需要的通配符

        ?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符,要匹配 ? 字符,请使用 \?;

        .   匹配除换行符 \n 之外的任何单字符,要匹配 . ,请使用 \. ;

        *   匹配前面的子表达式零次或多次,要匹配 * 字符,请使用 \*;

解释语句

        .* 匹配任意非\n字符零次或者多次 贪婪匹配,有多少匹配多少

        {n} n 是一个非负整数。匹配确定的 n 次;

        {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次

        {n,} n 是一个非负整数。至少匹配n 次。

        ?<=n  匹配任何其前紧跟字符n的字符串,返回中不包含n;

        () 和 $1搭配使用例如 $1,$2分别匹配第一个括号和第二个括号中的内容

二、敲代码

//隐藏姓名,姓名有两位 三位 甚至四位的,确定位数尤为重要 方便客户模糊确认
//a.substring(0,a.length-1).replace(/(?<=.)./g,"*")+(a.length-1==1?"*":a[a.length-1]);
//输出结果 王*傻 王* 汪* 辣**子 王*二 汪*二
var str_list1=["王二傻","王二","汪汪","辣木洋子","王二二","汪汪二"]
function test1(str_list){
	str_list.forEach((item,index) =>{
		var a = item;
		a = a.
		a=a.substring(0,a.length-1).replace(/(?<=.)./g,"*")+(a.length-1==1?"*":a[a.length-1]);
		console.log(a)
	});
}
test1(str_list1);

//隐藏手机中间四位数,当然你可以更改 ‘3’,‘4’以及‘*’的数目,隐藏更多的数字
//手机的位数固定非常好隐藏,通过字符串拼接也可以做到
//a.replace(/(.{3}).*(.{4})/, '$1****$2')
//输出 157****4986
var str_list2=["15755594980"]
function test2(str_list){
	str_list.forEach((item,index) =>{
		var a = item;
		a = a.replace(/(.{3}).*(.{4})/, '$1****$2')
		console.log(a)
	});
}
test2(str_list2);

//隐藏身份证中出生日期,当然你可以更改 ‘6’,‘4’以及‘*’的数目,隐藏更多的数字
//输出结果 340322********8888
//a.replace(/(.{6}).*(.{4})/, '$1********$2')
str_list3=["340322199909388888"]
function test3(str_list){
	str_list.forEach((item,index) =>{
		var a = item;
		a = a.replace(/(.{6}).*(.{4})/, '$1********$2')
		console.log(a)
	});
}
test3(str_list3);

//隐藏车牌号中间的4位数字,车牌号有七位和新能源汽车8位,当然你可以更改 ‘2’,‘3’以及‘*’的数目,隐藏更多的数字
//a.replace(/(.{2}).{4}(.{1,2})/, '$1****$2')
//车牌号的位数也非常重要 一个是可以验证 一个是可以区分车类型
var str_list4=["皖ED5555","京A000001"]
function test4(str_list){
	str_list.forEach((item,index) =>{
		var a = item;
		a = a.replace(/(.{2}).{4}(.{1,2})/, '$1****$2')
		console.log(a)
	});
}
test4(str_list4);

//隐藏银行卡号 中间8数字,银行卡16位 17位 19位,不同位数代表不同类型卡 是有必要确定位数的
//a.replace(/(.{4}).{8}(.{4,})/, '$1********$2')
//输出结果见 下图
var str_list5=["0000000000000000","00000000000000000","0000000000000000000"]
function test5(str_list){
	str_list.forEach((item,index) =>{
		var a = item;
		a = a.replace(/(.{4}).{8}(.{4,})/, '$1********$2')
		console.log(a)
	});
}
test5(str_list5);

//隐藏邮箱号码 邮箱位数 各种各样 不好隐藏固定的 反正是隐藏为目的不必确定是多少位
//当然也是可以做到确定位数的隐藏只不过比较麻烦
var str_list6=["111111111@qq.com","www22222@163.com"]
function test6(str_list){
	str_list.forEach((item,index) =>{
		var a = item;
		a = a.replace(/(.{2}).*(@.*)/, '$1********$2')
		console.log(a)
	});
}
test6(str_list6);

三、参考文档

https://www.jianshu.com/p/488d60349325

https://www.runoob.com/regexp/regexp-syntax.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖人称王某人的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值