I am trying to write a regular expression to mask an email address. Example below.
input: [email protected]
output: j*******@e*********.com
I have tried the following but I just can't seem to get it working correctly.
regex:
(?<=.).(?=[^@]\*?@)
output:j*******@example.en.com
regex:
(?<=.).(?=[^@]\*?)(?=[^\.]\*?\.)
output:j******************.com
Any help would be appreciated. demo
[email protected]
⇒ f**@b**.com
(current question) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
(see the regex demo)
[email protected]
⇒ f**@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(see the regex demo)
[email protected]
⇒ f*o@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(see the regex demo)
[email protected]
⇒ f**@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(see the regex demo)
[email protected]
⇒ f*o@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(see the regex demo)
In case you can't use a code-based solution, you may use
s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
See the regex demo
What it does:
(?<=.)[^@](?=[^@]*?@)
-any char other than @
([^@]
) that is preceded by any single char ((?<=.)
) and is followed with any 0 or more chars other than @
up to a @
((?=[^@]*?@)
)|
- or(?:(?<=@.)|(?!^)\\G(?=[^@]*$))
- match a location in the string that is preceded with @
and any char ((?<=@.)
) or (|
) the end of the previous successful match ((?!^)\\G
) that is followed with any 0+ chars other than @
uo to the end of string ((?=[^@]*$)
).
- any single char(?=.*\\.)
- followed with any 0+ chars up to the last .
symbol in the string.