2024年6月19日
之前看过用下面脱敏手机号的方式,好处是方便调整位数
String v = "13333333333";
String s = v.replaceAll("(?<=.{3}).(?=.{4})", "*"); // 133****3333
反向预查(?<=.{3})
和正向预查(?=.{4})
不能理解成保留位数
是用来匹配(前面有3个字符)(后面有4个字符)的字符
,这些字符每一个都被replaceAll替换成参数符号"*"
按照这个思路,发挥空间还是有的,刁钻一点的比如邮箱@前全部替换成*
,且最多5个*
String v = "1234567890@qq.com";
String s = v.replaceAll("(.+(?=.{4,}@)|.(?=.*@))", "*"); // *****@qq.com
思路:先匹配@4个字符再往前的字符,这些字符替换成一个*
;再把剩下的4个每一个都替换成*
凑够5个。
.(?=.{4,}@)
匹配@前的第5个字符
.+(?=.{4,}@)
匹配@前第5个字符前的所有字符,replaceAll时当做一个
.(?=.*@)
@前的任意字符,匹配范围大,如果调换|
的位置:(.(?=.*@)|.+(?=.{4,}@))
后半段不生效
String s = v.replaceAll("(.(?=.*@)|.+(?=.{4,}@))", "*"); // **********@qq.com
String s = v.replaceAll("(.(?=.*@))", "*"); // **********@qq.com 和上面一样
例子 邮箱示例 1234567890@qq.com
作者@qq.com
@qq.com
String v = "1234567890@qq.com";
// @前全部替换*,且最多5个*
String s = v.replaceAll("(.+(?=.{4,}@)|.(?=.*@))", "*"); // *****@qq.com
// @前的5个替换成1个*,开头多出来的不变
String s = v.replaceAll("(.{5})(?=@)", "*"); // 12345*@qq.com
// @前的5个替换成5个*,开头多出来的不变
String s = v.replaceAll(".(?=.{0,4}@)", "*"); // 12345*****@qq.com
// 保留@前的5个不变,再往前的替换n个*
String s = v.replaceAll(".(?=.{5,}@)", "*");// *****67890@qq.com //换成一个*的:".+(?=.{5,}@)"
不合适的地方请评论指正
点个赞再走👍