E-mail address are defined in RFC 5322, § 3.4. The relevant non-terminal is addr-spec
. The definition turns out to be somewhat squirelly, due to both the complications of domain specifications and supporting old, obsolete forms. However, you can do an over-approximation for most forms with:
^[-0-9A-Za-z!#$%&'*+/=?^_`{|}~.]+@[-0-9A-Za-z!#$%&'*+/=?^_`{|}~.]+
Notice that there are a very large number of legal characters. Most reg-exs get the list wrong. Yes, all those characters are legal in an e-mail address.
This regex will not match some very uncommon used forms like "noodle soup @ 9"@[what the.example.com]
-- which is a legal e-mail address!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…