^[a-z0-9!#$%&'*+-/=?^_`{}|~]+(\.[a-z0-9!#$%&'*+-/=?^_`{}|~]+)*@[a-z]([-a-z0-9]*[a-z0-9])?(\.[a-z]([-a-z0-9]*[a-z0-9])?)*$ One can most likely do without most of the characters in the local-part. To use: $ egrep '^[a-z0-9[a-z0-9%&'\''*+-/=?^_`{}|~]+([.][a-z0-9!#$%&'\''*+-/=?^_`{}|~]+)*@[a-z]([-a-z0-9]*[a-z0-9])?([.][a-z]([-a-z0-9]*[a-z0-9])?)*$' Extended to allow underscores and leading digits to the domain name: ^[a-z0-9!#$%&'*+-/=?^_`{}|~]+(\.[a-z0-9!#$%&'*+-/=?^_`{}|~]+)*@[a-z0-9]([-a-z0-9_]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9_]*[a-z0-9])?)*$ Some references: RFC2822 (Internet Message Format) quoted-string = [CFWS] DQUOTE *([FWS] qcontent) [FWS] DQUOTE [CFWS] text = %d1-9 / ; Characters excluding CR and LF %d11 / %d12 / %d14-127 / obs-text obs-text = *LF *CR *(obs-char *LF *CR) obs-char = %d0-9 / %d11 / ; %d0-127 except CR and %d12 / %d14-127 ; LF obs-utext = obs-text obs-phrase = word *(word / "." / CFWS) obs-phrase-list = phrase / 1*([phrase] [CFWS] "," [CFWS]) [phrase] dcontent = dtext / quoted-pair dtext = NO-WS-CTL / ; Non white space controls %d33-90 / ; The rest of the US-ASCII %d94-126 ; characters not including "[", ; "]", or "\" atext = ALPHA / DIGIT / ; Any character except controls, "!" / "#" / ; SP, and specials. "$" / "%" / ; Used for atoms "&" / "'" / "*" / "+" / "-" / "/" / "=" / "?" / "^" / "_" / "`" / "{" / "|" / "}" / "~" atom = [CFWS] 1*atext [CFWS] dot-atom = [CFWS] dot-atom-text [CFWS] dot-atom-text = 1*atext *("." 1*atext) phrase = 1*word / obs-phrase addr-spec = local-part "@" domain local-part = dot-atom / quoted-string / obs-local-part quoted-string = [CFWS] DQUOTE *([FWS] qcontent) [FWS] DQUOTE [CFWS] qtext = NO-WS-CTL / ; Non white space controls %d33 / ; The rest of the US-ASCII %d35-91 / ; characters not including "\" %d93-126 ; or the quote character qcontent = qtext / quoted-pair quoted-pair = ("\" text) / obs-qp obs-qp = "\" (%d0-127) obs-local-part = word *("." word) word = atom / quoted-string domain = dot-atom / domain-literal / obs-domain domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS] obs-domain = atom *("." atom) RFC1035 (DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION). ::= | " " ::=