Masking phone number Java

Cassie picture Cassie · Nov 21, 2017 · Viewed 12.4k times · Source

I need to mask the phone number. it may consist of the digits, + (for country code) and dashes. The country code may consist of 1 or more digits. I have created such kind of regular expression to mask all the digits except the last 4:

inputPhoneNum.replaceAll("\\d(?=\\d{4})", "*");

For such input: +13334445678

I get this result: +*******5678

However, it doesn't work for such input: +1-333-444-5678 In particular, it returns just the same number without any change. While the desired output is masking all the digits except for the last 4, plus sign and dashes. That is why I was wondering how I can change my regular expression to include dashes? I would be grateful for any help!

Answer

anubhava picture anubhava · Nov 21, 2017

Use this regex for searching:

.(?=.{4})

RegEx Demo

Difference is that . will match any character not just a digit as in your regex.

Java code:

inputPhoneNum = inputPhoneNum.replaceAll(".(?=.{4})", "*");

However if your intent is to mask all digits before last 4 digits then use:

.(?=(?:\D*\d){4})

Or in Java:

inputPhoneNum = inputPhoneNum.replaceAll("\\d(?=(?:\\D*\\d){4})", "*");

(?=(?:\\D*\\d){4}) is a positive lookahead that asserts presence of at least 4 digits ahead that may be separated by 0 or more non-digits.

RegEx Demo 2