Also note that addresses containting IP addresses are valid (user@164.34.34.13) as well as having any number of subdomains (user@redhat.is.compsci.campus.city.university.edu).
You can also have the following in a local network: user@host (where there are no periods). But again, that would only be good for intra-net setups.
Don't forget some of the other characters that are allowed before the '@':
_-.+%
(i can't remember, but I thing I had also seen some of the following used as well:
!#$&*()=~`)
I ended up making a regex that was used for a web-site verifying that what the user entered was at least in a valid form with the following:
"[a-z0-9-]+(%[a-z0-9-]){0,1}[(.[_a-z0-9-]+)@((a-z0-9[a-z0-9]*.)+[a-z]{2,6}|[1-2]{0,1}[0-9]{1,2}.[1-2]{0,1}[0-9]{1,2}.[1-2]{0,1}[0-9]{1,2}.[1-2]{0,1}[0-9]{1,2})$"
It's really long, but I have not seen any addresses that were valid not go through (I was logging to verify the regex).
The pattern will let invalid IP addresses through, but that's not part of the form, but more of a "address doesn't exist" problem.