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(' ') + '"';