屏蔽电话号码 Java



我需要屏蔽电话号码。 它可以由数字+(用于国家/地区代码(和短划线组成。国家/地区代码可以由 1 位或多位数字组成。我创建了这种正则表达式来掩盖除最后 4 个数字之外的所有数字:

inputPhoneNum.replaceAll("\d(?=\d{4})", "*");

对于此类输入:+13334445678

我得到这个结果: +********5678

但是,它不适用于此类输入:+1-333-444-5678特别是,它只返回相同的数字,没有任何变化。而所需的输出会屏蔽除最后 4 位以外的所有数字,加上符号和破折号。这就是为什么我想知道如何更改我的正则表达式以包含破折号?我将不胜感激任何帮助!

使用此正则表达式进行搜索:

.(?=.{4})

正则表达式演示

不同之处在于.将匹配任何字符,而不仅仅是正则表达式中的数字。

爪哇代码:

inputPhoneNum = inputPhoneNum.replaceAll(".(?=.{4})", "*");

但是,如果您的目的是屏蔽最后 4 位数字之前的所有数字,请使用:

.(?=(?:D*d){4})

或者在爪哇中:

inputPhoneNum = inputPhoneNum.replaceAll("\d(?=(?:\D*\d){4})", "*");

(?=(?:\D*\d){4}) 是一个积极的前瞻,断言前面至少存在 4 位数字,这些数字可能由 0 或多个非数字分隔。

正则表达式演示 2

我不擅长正则表达式,但我认为您应该通过摆脱-来规范电话号码:

   inputPhoneNum = inputPhoneNum.replace("-","").replaceAll("\d(?=\d{4})", "*");

尝试使用两个将所有非数字或 + 替换为空,然后使用您的正则表达式:

"+1-333-444-5678".replaceAll("[^\d\+]", "").replaceAll("\d(?=\d{4})", "*");

输出

+*******5678

我认为这应该有效

".*\d(?=\d{4})","*"

您可以尝试使用此网站通过点击和试用进行创建。

如果您不想使用 regex ,另一种解决方案是用StringBuilder从头到尾循环遍历String,并附加前 4 位数字,然后*(并像往常一样附加任何非数字字符(

public static String lastFour(String s) {
        StringBuilder lastFour = new StringBuilder();
        int check = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            if (Character.isDigit(s.charAt(i))) {
                check++;
            }
            if (check <= 4) {
                lastFour.append(s.charAt(i));
            } else {
                lastFour.append(Character.isDigit(s.charAt(i)) ? "*" : s.charAt(i));
            }
        }
        return lastFour.reverse().toString();
    }

在线试用!

这是我使用的,它可能很有用,只是屏蔽了提供的数字中的一些数字

 /*
 * mask mobile number .
 */
public  String maskMobileNumber(String mobile) {
    final String mask = "*******";
    mobile = mobile == null ? mask : mobile;
    final int lengthOfMobileNumber = mobile.length();
    if (lengthOfMobileNumber > 2) {
        final int maskLen = Math.min(Math.max(lengthOfMobileNumber / 2, 2), 6);
        final int start = (lengthOfMobileNumber - maskLen) / 2;
        return mobile.substring(0, start) + mask.substring(0, maskLen) + mobile.substring(start + maskLen);
    }
    return mobile;
}

最新更新