为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式屏蔽电子邮件地址和域

使用正则表达式屏蔽电子邮件地址和域

当年话下 2021-04-30 04:45:30
要求如下:Input: rajani@gmail.comOutput: r****i@*****.com我在两个正则表达式下面尝试过,但是我无法屏蔽gmail(域名)。请帮助我。String masked_email_Address2=email_Address.replaceAll("(?<=.{1}).(?=[^@]*?.@)", "*");输出为 r****i@gmail.com我对此进行了堆栈溢出搜索,得到了以下正则表达式,但未产生正确的结果:String masked_email_Address1=email_Address.replaceAll("\\b(\\w)[^@]+@\\S+(\\.[^\\s.]+)", "$1***@****$2");收到的输出为:r***@****.com-R&@之间缺少一颗星(*)。
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

我开始尝试像以前一样使用单线来执行此操作String#replaceAll,但后来放弃了,因为不支持可变长度的lookbehinds,并且我无法提出一种不使用它们的模式。

相反,请尝试仅使用格式模式匹配器:

String email = "rajani@gmail.com";String pattern = "([^@]+)@(.*)\\.(.*)";Pattern r = Pattern.compile(pattern);Matcher m = r.matcher(email);if (m.find( )) {
    StringBuilder sb = new StringBuilder("");
    sb.append(m.group(1).charAt(0));
    sb.append(m.group(1).substring(1).replaceAll(".", "*"));
    sb.append("@");
    sb.append(m.group(2).replaceAll(".", "*"));
    sb.append(".").append(m.group(3));
    System.out.println(sb);}

//img1.sycdn.imooc.com//609b94dc0001836101460026.jpg

演示版


这看起来像很多代码,可以在电子邮件地址上执行相对较小的格式化工作。如果愿意,可以将此代码放入实用程序方法中,然后在调用该方法时仍可以通过单行代码获得屏蔽效果。


查看完整回答
反对 回复 2021-05-12
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

怎么样:

String masked_email_Address2=email_Address.replaceAll("(.)?[^@]*([^@])@\\S+(\\.[^\\s.]+)?", "$1****$2@****$3");

只要您的地址长度超过1个字符,此方法就可以使用。


查看完整回答
反对 回复 2021-05-12
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

试试这个:


int idx = email_Address.indexOf('@');

 String part1 = email_Address.substring(1, idx-1).replaceAll(".", "\\*");

 String part2 = email_Address.substring(idx + 1, email_Address.lastIndexOf('.')).replaceAll(".", "\\*");


 String masked_email_Address1=email_Address.replaceAll("^(\\S)[^@]+(\\S)@.*(\\..*)", "$1"+ part1 + "$2@" + part2 + "$3");



查看完整回答
反对 回复 2021-05-12
  • 3 回答
  • 0 关注
  • 308 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信