Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中电子邮件地址的屏蔽_Java_Regex - Fatal编程技术网

java中电子邮件地址的屏蔽

java中电子邮件地址的屏蔽,java,regex,Java,Regex,我试图用“*”来屏蔽电子邮件地址,但我不擅长正则表达式 input : nileshxyzae@gmail.com output : nil********@gmail.com 我的代码是 String maskedEmail = email.replaceAll("(?<=.{3}).(?=[^@]*?.@)", "*"); String maskedEmail=email.replaceAll((?您的前瞻性有点复杂。请尝试以下代码: public static void main

我试图用“*”来屏蔽电子邮件地址,但我不擅长正则表达式

input : nileshxyzae@gmail.com
output : nil********@gmail.com
我的代码是

String maskedEmail = email.replaceAll("(?<=.{3}).(?=[^@]*?.@)", "*");

String maskedEmail=email.replaceAll((?您的前瞻性有点复杂。请尝试以下代码:

public static void main(String... args) throws Exception {
    String s = "nileshkemse@gmail.com";
    s= s.replaceAll("(?<=.{3}).(?=.*@)", "*");
    System.out.println(s);
}

如果你不擅长正则表达式,就不要使用它们:)我不知道你是否听说过这句话:

有些人在遇到问题时会想 “我知道,我会使用正则表达式。”现在他们有两个问题

()

你可能会在这里得到一个有效的正则表达式,但你今天能理解它吗?明天?六个月后?你的同事能理解吗

一个简单的替代方法是使用
StringBuilder
,我认为理解这里发生的事情要简单得多:

StringBuilder sb = new StringBuilder(email);
for (int i = 3; i < sb.length() && sb.charAt(i) != '@'; ++i) {
  sb.setCharAt(i, '*');
}
email = sb.toString();
StringBuilder sb=新的StringBuilder(电子邮件);
对于(int i=3;i
从第三个字符开始,用
*
替换字符,直到到达字符串末尾或
@

(您甚至不需要使用
StringBuilder
:您只需操作
email.tocharray()
的元素,然后在末尾构造一个新字符串)

当然,这对于本地部分短于3个字符的电子邮件地址是不正确的-它实际上会屏蔽域。

您的前瞻
(?=[^@]*?。@
要求
@
前面至少有1个字符(请参见
@
前面的点)

如果将其删除,将替换所有预期符号:

(?<=.{3}).(?=[^@]*?@)
请参见,替换为
$1*
。此处,
[^@]
匹配任何非
@
的字符,因此我们不匹配
abc@example.com
。只有用户名部分包含4个以上字符的电子邮件才会被屏蔽

见:


我喜欢这个,因为我只想隐藏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
//在Kotlin中
val电子邮件=”nileshkemse@gmail.com"

Valas-MaskDeMeLe=电子邮件(替换)(ReXEX)(?这是你的真实电子邮件地址吗?如果是的话,你可能想考虑改变它……第二正则表达式可以简化为<代码>(^ [^ @ ] { 3 }(?!^)\g)/代码> @ nHAHTDH:或<代码>(^ [^ @ ] { 3 }((?)^)g)[^ @ ](?=[^ @ ] *@)
。有趣的是,删除前瞻后,完成匹配的步骤数增加。您需要选中复选框“禁用内部引擎优化”在调试器中。执行此操作后,对于失败的情况,它们的步骤数相同,而在成功的情况下,没有前瞻的情况下步骤数较少。在Java中,没有针对具有前瞻的情况进行优化。感谢您提醒有关如何使用regex101更好地调试Java regex的提示:)也许可以使用所有格量词来克服这个缺点,但我同意删除它是一种有效的方法。我想跳过
@
之前的一个字符,我使用
(?为什么
\w
而不是简单的
?这导致了“foo”。bar@gmail.com“->”foo*bar@gmail.com而不是“foo****@gmail.com”@xehpuk-Ya。没有考虑过这种情况。现在更改了我的代码。谢谢。虽然您的代码可能会提供问题的答案,但请添加上下文,以便其他人了解它的作用和原因。感谢您的建议。在java中,我们有replaceAll,但在kotlin中我们没有。它是为kotlin learning user.ho发布的用同样的方法屏蔽gmail吗way@VanyaRachel-你知道怎么做了吗?你可以用if块做一个函数,这次使用:domain=email.substring(0,at+1)和
at
作为域的长度。我没有添加到答案中,因为我想保持它的简单和简短。
String s = "nileshkemse@gmail.com";
System.out.println(s.replaceAll("(^[^@]{3}|(?!^)\\G)[^@]", "$1*"));
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
//In Kotlin

val email = "nileshkemse@gmail.com"
val maskedEmail = email.replace(Regex("(?<=.{3}).(?=.*@)"), "*")
    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;
    }