我有一个电话号码屏蔽的方法。我需要将除最后 4 位之外的所有数字替换为星号。 输入示例为:+91 (333) 444-5678 和 +1(333) 456-7890 。输出应如下所示:
但我的输出实际上是这样的:
这是我的代码:
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 demo 和 final step demo 。
关于java - 带括号和空格的掩码电话号码 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47454768/