用正则表达式替换手机号为星号*的写法

现在网络越来越关注一些隐私,比如手机号隐藏当中的若干位数字,或隐藏身份证,银行卡号当中的若干长度为星号

 

对于一些固定长度的内容转换其实都挺方便的,但对于一些非定长的内容想保留固定尾部内容或者头部内容的话就比较麻烦了。

这两天发现很多朋友都不会写这个正则表达式,这里拿出来分享下

 

比如手机号只显示头尾的各3个数字,最简单的做法就是截取头部三个数字和尾部三个数字,然后当中插入5个星号就可以

这种做法显得比较笨拙,当然效率可能高一些,不过缺乏灵活性,比如人名显示姓,名字换成对应的*,那人名长度现在一般在2-4个字,具体后面跟多少个星号*,根据人数迭代啥的就麻烦点了

 

如果使用正则的话,就比较灵活,代码也比较简单。

假设对一串数字,保留头尾各3个数字,当中全部替换成*的话,代码如下:

String mobile = "13123456789";
String outMobile = mobile.replaceAll("(?<=\\d{3})\\d(?=\\d{3})", "*");
System.out.println(outMobile);

正则表达式的意思是,把所有前面有3个数字,后面有3个数字的数字换成*,那么于是从字符串中的2开始到7均在这个条件范围内,所以就全部替换了。

 

其他的可以根据这个灵活变换,当然如果反复这么调用的话,性能不是很高,所以建议参考replaceAll的源码,先生成Pattern对象,然后直接调用pattern.matcher(mobile).replaceAll("*");来操作,这样可以节省对象创建的内存及性能方面的消耗

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值