There's more to it than that, as you'll find if you look at RFC 822 (part 6). For example, you need to check for conformance with the following syntax:
domain-literal = "[" *(dtext / quoted-pair) "]"
atom = 1*<any CHAR except specials, SPACE and CTLs>
quoted-pair = "\" CHAR ; may quote any char
phrase = 1*word ; Sequence of words
word = atom / quoted-string
address = mailbox ; one addressee
/ group ; named list
group = phrase ":" [#mailbox] ";"
mailbox = addr-spec ; simple address
/ phrase route-addr ; name & addr-spec
route-addr = "<" [route] addr-spec ">"
route = 1#("@" domain) ":" ; path-relative
addr-spec = local-part "@" domain ; global address
local-part = word *("." word) ; uninterpreted
; case-preserved
domain = sub-domain *("." sub-domain)
sub-domain = domain-ref / domain-literal
quoted-string = <"> *(qtext/quoted-pair) <">; Regular qtext or
; quoted chars.
qtext = <any CHAR excepting <">, ; => may be folded
"\" & CR, and including
linear-white-space>
domain-ref = atom ; symbolic reference
(... and so on in enormous detail - I've definitely missed a few bits.)
Email address validation isn't as simple as people think ;-)
(OT: why does /.'s filter mistake a quote from an RFC for ASCII art, forcing me to post in Code mode?)