This is a simple JavaScript function that will mask your email address following this pattern:
- If it’s not an email, the input string will be returned without modification.
- If the first part of the email is shorter than 4 characters, the entire username will be masked (me@example.com => *@e*****e.com)
- If the domain part of the email is shorter than 4 symbols, the entire domain will be masked
(username@abc.com => u******e@***.com - The TLD part (.com/.net/.org and etc) is never masked
- If the input string contains multiple emails (for example the whole log message from the server), all email addresses found in the string will be processed.
/** * Mask email address with asterisks to comply GDPR * john.doe@example.com => j******e@e****e.com * @param {string} emailAddress email address * @returns {string} masked email address */ function maskEmailAddress (emailAddress) { function mask(str) { var strLen = str.length; if (strLen > 4) { return str.substr(0, 1) + str.substr(1, strLen - 1).replace(/\w/g, '*') + str.substr(-1,1); } return str.replace(/\w/g, '*'); } return emailAddress.replace(/([\w.]+)@([\w.]+)(\.[\w.]+)/g, function (m, p1, p2, p3) { return mask(p1) + '@' + mask(p2) + p3; }); return emailAddress; } return maskEmailAddress('random string username@example.com test');
In domain name could be \”-\”;
Will be a problem with emails like ex.: \”vlad@vladimir-ivanov.net\”; / :).
.replace(/([\\w.]+)@([\\w-.]+)(\\.[\\w-.]+)/g