JSFiddle - React, Tailwind, and code Playground
by kimiliini
HTML
<pre id="res"></pre>
JavaScript
/*
Sample include simple name sanitizing. Instead of validating name
unwanted characters in ASCII range are removed:
' At start of name
0x00 - 0x1f NUL -> US
0x21 - 0x26 ! -> &
0x28 - 0x2b ( -> +
0x2f - 0x40 / -> @
0x5b - 0x5f [ -> _
0x7b - 0x7e { -> ~
*/
var email =
'LastnameA, FirstnameA <nameA@example.net>, ' +
'FirstnameB LastnameB <nameB@example.net, ' + // missing >
'\'LastnameC <nameC@example.net>, ' +
'LastD NameD, MiddleD NameD, FirstD NameD nameD@example.net ' +
'"FirstE E. LastnameE" <nameE@example.net>, ' +
'nameF@nonamebeforeme.example.net ' +
'Połącz Słońce w Mózu <plz@example.net> ' +
'L33t Spiiker /good/mofo]] <l33t@hotmail.com> ' +
'Moot @m Email'
;
var re_email = /^<?[a-zA-Z0-9.!#$%&’*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*>?,?$/,
re_name = /^'|[\x00-\x1f\x21-\x26\x28-\x2b\x2f-\x40\x5b-\x5f\x7b-\x7e]/g,
name = [],
rec = [],
inp = email.split(/[ ]+/)
;
for (i = 0; i < inp.length; ++i) {
if (re_email.test(inp[i])) {
rec.push({
name : name.join(' ').replace(re_name, ''),
email: inp[i].replace(/[<>,]/g, '')
});
name = [];
} else {
name.push(inp[i])
}
}
document.getElementById("res").innerHTML =
rec.length + ' records => ' +
JSON.stringify(rec, null, ' ') + '\n' +
'Leftovers: "' + name.join(' ') + '"';