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.
Using regular expressions for this is *not* a good idea, as has been demonstrated at length in those other posts.

I suppose people keep doing it because they don't know any better or don't care.

Will a parser be any better? Maybe, maybe not.

I maintain that sending a verification e-mail is the best way to validate it. If you want to check anything from JavaScript, then check that it has an '@' sign in there and something before and after it. If you go any stricter than that, you risc running up against some syntax you didn't know about and your validator will become overly restrictive.

Also, be careful with that TLD validation scheme of yours, you might find that you are [assuming too much](http://www.bizreport.com/2008/07/icann_anything_is_the_next_domain_craze.html) about what is allowed in a TLD.