我需要保护文本中包含的电子邮件地址。理想情况下,找到一个可以更有效地完成它的正则表达式。
示例:
Hi: My Name is Alex and my mail is alexmail@domain.com but you can reply to alexreply@other.domain.com.
期望的输出:
Hi: My Name is Alex and my mail is ale****@domain.com but you can reply to ale****@other.domain.com.
逻辑是:保留前3个字符并用*替换其余字符,直到@。
a@mail.com => a****@mail.com
ab@mail.com => ab****@mail.com
abc@mail.com => abc****@mail.com
abcd@mail.com => abc****@mail.com
abcde@mail.com => abc****@mail.com
现在,我创建了一个以这种方式保护邮件的功能,但是当它是包含多封电子邮件的文本时,我就无法使用 replaceAll 。
public static String protectEmailAddress(String emailAddress) {
String[] split = emailAddress.split("@");
if (split[0].length() >= 3) {
split[0] = split[0].substring(0, 3);
}
emailAddress = StringUtils.join(split, "****@");
return emailAddress;
}
基本上我需要的是一个很好的正则表达式。类似于this但与邮件的另一部分类似的东西,如果可能的话。
...谢谢
答案 0 :(得分:4)
您可以使用(\\w{1,3})(\\w+)(@.*)
String str = "alexreply@other.domain.com";
str = str.replaceAll("(\\w{1,3})(\\w+)(@.*)", "$1****$3");
System.out.println(str);
<强>输出强>
ale****@other.domain.com
说明:
(\\w{1,3})
:匹配1到3个字符(\\w+)
:匹配一个或多个单词字符(@.*)
:匹配(包括)@
$1
:表示第一组(\\w{1,3})
$3
:表示第3组(@.*)
答案 1 :(得分:2)
你可以使用类似的东西:
text = text.replaceAll("\\S{1,4}@","****@");
它应该替换1到4个({1,4}
)非空白字符(\\S
),后跟@
****@
。
所以它会以某种方式替换文本
a@ -> ****@
ab@ -> ****@
abc@ -> ****@
abcd@ -> ****@
abcde@ -> a****@
abcdef@ -> ab****@
答案 2 :(得分:0)
这是检查字符串是否有效的方法(是否是电子邮件)。 将文本拆分为单词,并使用此方法检查每个单词。如果是电子邮件,请将其替换为星号(*)。
public static boolean isValidEmail(String str) {
String pattern = "^[\\w!#$%&’*+/=?`{|}~^-]+(?:\\.[\\w!#$%&’*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(str);
return m.matches();
}
答案 3 :(得分:0)
正则表达式不是正确的工具(参见:Using a regular expression to validate an email address)。另一种方法是沿着这些方向做点什么:
将您的信息拆分为单词(message.split("\\s+")
或其他类似内容)。
对于每个单词,通过InternetAddress
构造函数检查它是否是电子邮件地址:
try {
new InternetAddress(word, true);
// valid e-mail address
} catch (AddressException e) {
// not an e-mail address
}
如果一个单词是一个电子邮件地址,&#34;保护&#34;它使用你当前的功能。
将所有字词重新加入新邮箱,其中电子邮件地址全部受到保护。
如果你真的想在另一方面使用正则表达式,那么......好吧...... you asked for it。
答案 4 :(得分:0)
我建议采用以下方法:
+