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

要求如下:


Input: rajani@gmail.com

Output: 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&@之间缺少一颗星(*)。


当年话下
浏览 309回答 3
3回答

慕码人2483693

我开始尝试像以前一样使用单线来执行此操作String#replaceAll,但后来放弃了,因为不支持可变长度的lookbehinds,并且我无法提出一种不使用它们的模式。相反,请尝试仅使用格式模式匹配器:String&nbsp;email&nbsp;=&nbsp;"rajani@gmail.com";String&nbsp;pattern&nbsp;=&nbsp;"([^@]+)@(.*)\\.(.*)";Pattern&nbsp;r&nbsp;=&nbsp;Pattern.compile(pattern);Matcher&nbsp;m&nbsp;=&nbsp;r.matcher(email);if&nbsp;(m.find(&nbsp;))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder(""); &nbsp;&nbsp;&nbsp;&nbsp;sb.append(m.group(1).charAt(0)); &nbsp;&nbsp;&nbsp;&nbsp;sb.append(m.group(1).substring(1).replaceAll(".",&nbsp;"*")); &nbsp;&nbsp;&nbsp;&nbsp;sb.append("@"); &nbsp;&nbsp;&nbsp;&nbsp;sb.append(m.group(2).replaceAll(".",&nbsp;"*")); &nbsp;&nbsp;&nbsp;&nbsp;sb.append(".").append(m.group(3)); &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sb);}演示版这看起来像很多代码,可以在电子邮件地址上执行相对较小的格式化工作。如果愿意,可以将此代码放入实用程序方法中,然后在调用该方法时仍可以通过单行代码获得屏蔽效果。

慕妹3242003

怎么样:String&nbsp;masked_email_Address2=email_Address.replaceAll("(.)?[^@]*([^@])@\\S+(\\.[^\\s.]+)?",&nbsp;"$1****$2@****$3");只要您的地址长度超过1个字符,此方法就可以使用。

叮当猫咪

试试这个:int idx = email_Address.indexOf('@');&nbsp;String part1 = email_Address.substring(1, idx-1).replaceAll(".", "\\*");&nbsp;String part2 = email_Address.substring(idx + 1, email_Address.lastIndexOf('.')).replaceAll(".", "\\*");&nbsp;String masked_email_Address1=email_Address.replaceAll("^(\\S)[^@]+(\\S)@.*(\\..*)", "$1"+ part1 + "$2@" + part2 + "$3");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java