我需要掩盖电话号码。它可能由数字,+(代表国家/地区代码)和破折号组成。国家/地区代码可以包含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

10-08 13:05