java - 带括号和空格的掩码电话号码 Java

标签 java regex replaceall

我有一个电话号码屏蔽的方法。我需要将除最后 4 位之外的所有数字替换为星号。 输入示例为:+91 (333) 444-5678+1(333) 456-7890 。输出应如下所示:

enter image description here

但我的输出实际上是这样的:

enter image description here

这是我的代码:

public static String maskPhoneNumber(String inputPhoneNum){
        return inputPhoneNum.replaceAll("\\(", "-")
                .replaceAll("\\)", "-")
                .replaceAll(" ", "-")
                .replaceAll("\\d(?=(?:\\D*\\d){4})", "*");
    }

我的方法适用于国家/地区代码中不同位数的数字,但如果国家/地区代码附近不是数字之间有空格,而是括号(后面的三元组),则该方法会中断。 如果您能提供一些关于如何改进我的方法的提示,我将不胜感激!

最佳答案

目前,您可以将每个单独的空格 () 替换为 -。您需要将所有连续出现的内容替换为 1 个连字符。

使用

public static String maskPhoneNumber(String inputPhoneNum){
    return inputPhoneNum.replaceAll("[()\\s]+", "-")
            .replaceAll("\\d(?=(?:\\D*\\d){4})", "*");
}

参见 this Java demo

+91 (333) 444-5678 变为 +**-***-***-5678+1(333) 456-7890 变为 +*-***-***-7890

[()\s]+ 模式匹配 1 个或多个 (+) 连续 (, ) 或空白字符。请参阅 the "normalization" step regex demofinal step demo

关于java - 带括号和空格的掩码电话号码 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47454768/

相关文章:

java - SQLException : No suitable driver found for jdbc:derby://localhost:1527

java - 如何使用java for android在Canvas上画一个圆圈

python - 流上的正则表达式而不是字符串?

java - 如何在每个管道前面插入反斜杠

java .replaceAll 和换行符问题

java - 在java中比较两个csv文件并对double进行近似匹配

c# - 精确匹配单词,如果前面有特殊符号则不匹配

mysql - 计算 MySQL 中某行中某个单词的出现次数

Java:replaceAll 不能很好地与反斜杠一起使用?

Java 类加载器基础