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)
区别在于.它将匹配任何字符,而不仅仅是正则表达式中的数字.
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或更多的非数字分隔.