掩蔽电话号码Java

Cas*_*sie 8 java regex masking

我需要屏蔽电话号码.它可能包含数字,+(国家代码)和破折号.国家/地区代码可能包含1位或更多位数字.我创建了这种正则表达式来掩盖除了最后4位之外的所有数字:

inputPhoneNum.replaceAll("\\d(?=\\d{4})", "*");
Run Code Online (Sandbox Code Playgroud)

对于这样的输入:+13334445678

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

但是,它不适用于此类输入:+ 1-333-444-5678 特别是,它返回相同的数字而不做任何更改.虽然所需的输出屏蔽了除最后4位以外的所有数字,加号和短划线.这就是为什么我想知道如何改变我的正则表达式以包括短划线?我将不胜感激任何帮助!

anu*_*ava 10

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

.(?=.{4})
Run Code Online (Sandbox Code Playgroud)

RegEx演示

区别在于.它将匹配任何字符,而不仅仅是正则表达式中的数字.

Java代码:

inputPhoneNum = inputPhoneNum.replaceAll(".(?=.{4})", "*");
Run Code Online (Sandbox Code Playgroud)

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

.(?=(?:\D*\d){4})
Run Code Online (Sandbox Code Playgroud)

或者在Java中:

inputPhoneNum = inputPhoneNum.replaceAll("\\d(?=(?:\\D*\\d){4})", "*");
Run Code Online (Sandbox Code Playgroud)

(?=(?:\\D*\\d){4}) 是一个积极的先行,断言前面至少有4位数,可以用0或更多的非数字分隔.

RegEx演示2