使用正则表达式为手机号码或身份证号码打星号

首先正则表达式的匹配方式是凡是符合的字符都获得,所以对于手机号

(?<=[\d]{3})\d(?=[\d]{4})

这样一个表达式就可以只保留前三位和后四位


但是!这个表达式在百度搜索出的所有正则表达式在线测验中都是不能通过的,不知道为什么所有(?<=)这个表达式都是不支持的,晕。

大体讲解一下这个表达式的含义

  • [\d]{3}的意思是 三个数字
  • (?<=)的意思是 前面匹配但不保留,比如ILOVEYOULOVEME,(?<=I).{5}的结果只有LOVEY而没有LOVEM,也没有I

所以目前连起来的条件可以表达为 要求的数字必须满足前面有三个数字

  • (?=)的意思跟(?<=)恰好相反 后面匹配但不保留,比如ILOVEYOULOVEME,.{5}(?=ME)的结果只有ULOVE,没有ME

最后条件连起来就是 要求的数字必须满足前面有三个数字,且后面有4个数字。

假设手机号码为12345678910,则满足这一条件的数字为4和5和6和7。之所以用和,是想提醒最后的得到的数字不是4567而是分开的,代码中替代时只要替代一个“*”就好,因为会替代4次。


Java代码
String s = "15678901234";
s = s.replaceAll("(?<=[\\d]{3})\\d(?=[\\d]{4})", "*"); //这里*只要一个,因为会替代多次,每次一个。
System.out.println(s);

结果就是

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值