Question: There are a number of [email](https://stackoverflow.com/questions/156430/regexp-recognition-of-email-address-hard) regexp [questions](https://stackoverflow.com/questions/210945/what-would-be-a-globally-accepted-regular-expression-to-match-e-mail-addresses) popping [up](https://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses) here, and I'm honestly baffled why people are using these [insanely obtuse](https://stackoverflow.com/questions/156430/regexp-recognition-of-email-address-hard#156469) matching expressions rather than a very simple parser that splits the email up into the name and domain tokens, and then validates those against the valid characters allowed for name (there's no further check that can be done on this portion) and the valid characters for the domain (and I suppose you could add checking for all the world's TLDs, and then another level of second level domains for countries with such (ie, com.uk)).

The real problem is that the tlds and slds keep changing (contrary to popular belief), so you have to keep updating the regexp if you plan on doing all this high level checking whenever the root name servers send down a change.

Why not have a module that simply validates domains, which pulls from a database, or flat file, and optionally checks DNS for matching records?

I'm being serious here, why is everyone so keen on inventing the perfect regexp for this? It doesn't seem to be a suitable solution to the problem...

Convince me that it's not only possible to do in regexp (and satisfy everyone) but that it's a better solution than a custom parser/validator.

-Adam

Answer: 
Regexs that catch most (but not all) common error are relatively easy to setup and deploy. Takes longer to write a custom parser.
I don't believe correct email validation can be done with a single regular expression (now there's a challenge!). One of the issues is that comments can be nested to an arbitrary depth in both the local part and the domain.

If you want to validate an address against RFCs 5322 and 5321 (the current standards) then you'll need a procedural function to do so.

Fortunately, this is a commodity problem. Everybody wants the same result: RFC compliance. There's no need for anybody to write this code ever again once it's been solved by an open source function.

Check out some of the alternatives here: <http://www.dominicsayers.com/isemail/>

If you know of another function that I can add to the head-to-head, let me know.