我需要掩盖电话号码。它可能由数字,+(代表国家/地区代码)和破折号组成。国家/地区代码可以包含1个或多个数字。我创建了这种正则表达式来屏蔽除最后4个数字之外的所有数字:
inputPhoneNum.replaceAll("\\d(?=\\d{4})", "*");
对于此类输入: +13334445678
我得到以下结果: + ******* 5678
但是,它不适用于此类输入: + 1-333-444-5678
特别是,它返回的数字相同,没有任何变化。当所需的输出掩盖了除最后4个数字外的所有数字,加号和破折号。
这就是为什么我想知道如何更改正则表达式以包含破折号的原因?我将不胜感激!
最佳答案
使用此正则表达式进行搜索:
.(?=.{4})
RegEx Demo
区别在于
.
将匹配任何字符,而不仅仅是正则表达式中的数字。Java代码:
inputPhoneNum = inputPhoneNum.replaceAll(".(?=.{4})", "*");
但是,如果您打算在的最后4位数字之前屏蔽所有数字,请使用:
.(?=(?:\D*\d){4})
或在Java中:
inputPhoneNum = inputPhoneNum.replaceAll("\\d(?=(?:\\D*\\d){4})", "*");
(?=(?:\\D*\\d){4})
是一个积极的超前行为,它断言至少存在4位数字,并且可以用0个或多个非数字分隔。RegEx Demo 2