我试图用“*”掩盖电子邮件地址,但我对正则表达式不好。
alter
我的代码是
input : nileshxyzae@gmail.com
output : nil********@gmail.com
但它给我输出String maskedEmail = email.replaceAll("(?<=.{3}).(?=[^@]*?.@)", "*");
我在这里没有弄错。为什么最后一个角色没有转换?
也有人可以解释所有这些正则表达式的含义
答案 0 :(得分:16)
您的预测(?=[^@]*?.@)
要求@
前面至少有一个字符(请参阅@
之前的点)。
如果删除它,您将获得所有预期的符号替换:
(?<=.{3}).(?=[^@]*?@)
以下是the regex demo(替换为*
)。
但是,正则表达式不是该任务的正确正则表达式。你需要一个正则表达式,它匹配前3个字符后的每个字符,直到第一个@
:
(^[^@]{3}|(?!^)\G)[^@]
请参阅another regex demo,替换为$1*
。在这里,[^@]
匹配任何不是@
的字符,因此我们不匹配abc@example.com
之类的地址。只有那些在用户名部分中有4个以上字符的电子邮件才会被屏蔽。
请参阅IDEONE demo:
String s = "nileshkemse@gmail.com";
System.out.println(s.replaceAll("(^[^@]{3}|(?!^)\\G)[^@]", "$1*"));
答案 1 :(得分:10)
如果你对正则表达式不好,不要使用它们:)我不知道你是否听过这句话:
有些人在面对问题时会思考 “我知道,我会使用正则表达式。”现在他们有两个问题。
(source)
你可能会在这里得到一个有效的正则表达式,但今天你能理解吗?明天?在六个月的时间?你的同事会吗?
一个简单的替代方案是使用StringBuilder
,我认为理解这里发生的事情要简单得多:
StringBuilder sb = new StringBuilder(email);
for (int i = 3; i < sb.length() && sb.charAt(i) != '@'; ++i) {
sb.setCharAt(i, '*');
}
email = sb.toString();
“从第三个字符开始,用*
替换字符,直到到达字符串的末尾或@
。”
(你甚至不需要使用StringBuilder
:你可以简单地操纵email.toCharArray()
的元素,然后在结尾处构造一个新的字符串。)
当然,对于本地部分短于3个字符的电子邮件地址,这不能正常工作 - 实际上它会掩盖域名。
答案 2 :(得分:3)
你的前瞻有点复杂。试试这段代码:
public static void main(String... args) throws Exception {
String s = "nileshkemse@gmail.com";
s= s.replaceAll("(?<=.{3}).(?=.*@)", "*");
System.out.println(s);
}
O / P:
nil********@gmail.com
答案 3 :(得分:0)
我喜欢这个是因为我只想隐藏4个字符,如果电子邮件地址太短,它也会动态地将隐藏的字符减少到2个:
public static String maskEmailAddress(final String email) {
final String mask = "*****";
final int at = email.indexOf("@");
if (at > 2) {
final int maskLen = Math.min(Math.max(at / 2, 2), 4);
final int start = (at - maskLen) / 2;
return email.substring(0, start) + mask.substring(0, maskLen) + email.substring(start + maskLen);
}
return email;
}
样本输出:
my.email@gmail.com > my****il@gmail.com
info@mail.com > i**o@mail.com
答案 4 :(得分:0)
//In Kotlin
val email = "nileshkemse@gmail.com"
val maskedEmail = email.replace(Regex("(?<=.{3}).(?=.*@)"), "*")
答案 5 :(得分:0)
public static string GetMaskedEmail(string emailAddress)
{
string _emailToMask = emailAddress;
try
{
if (!string.IsNullOrEmpty(emailAddress))
{
var _splitEmail = emailAddress.Split(Char.Parse("@"));
var _user = _splitEmail[0];
var _domain = _splitEmail[1];
if (_user.Length > 3)
{
var _maskedUser = _user.Substring(0, 3) + new String(Char.Parse("*"), _user.Length - 3);
_emailToMask = _maskedUser + "@" + _domain;
}
else
{
_emailToMask = new String(Char.Parse("*"), _user.Length) + "@" + _domain;
}
}
}
catch (Exception) { }
return _emailToMask;
}