Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

556
Views
Regular expression for email masking

I am trying to write a regular expression to mask an email address. Example below.

input: john.doe@example.en.com

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

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Update with various masking email solutions

  • foo@bar.com ⇒ f**@b**.com (current question) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*") (see the regex demo)

  • foo@bar.com ⇒ f**@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*") (see the regex demo)

  • foo@bar.com ⇒ f*o@b*r.com - s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*") (see the regex demo)

  • foo@bar.com ⇒ f**@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*") (see the regex demo)

  • foo@bar.com ⇒ f*o@b*****m - s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*") (see the regex demo)

Original answer

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.
about 4 years ago · Santiago Trujillo Report

0

How about this one if you do not need the masks having the same number of characters of the original strings (which is more anonymous):

(?<=^.)[^@]*|(?<=@.).*(?=\.[^.]+$)

For example, if you replace the matches with ***, the result would be:

j***@e***.com
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!