转载:邮箱正则表达式Comparing E-mail Address Validating Regular Expressions

时间:2021-01-20 15:12:22

Comparing E-mail Address Validating Regular Expressions

Updated: 2/3/2012

Summary

This page compares regular expressions that validate e-mail addresses in order to find the best one. The expression with the best score is currently the one used by PHP's filter_var(), which is based on a regex by Michael Rushton:

/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD

The best one that's been verified to work in JavaScript is Arluison Guillaume's improvement of Warren Gaebel's regex:

/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i


Introduction

I was writing a web application and wanted to find a regular expression
to validate user's e-mail addresses, but when I searched for one I
found dozens of slightly different variations of the same expression.
Almost all of the posts were followed by comments describing examples of
false-positives or false-negatives. But dispite all the criticism, I
couldn't find a definitive "best" expression. So, I setup arrays of some
of the most promising ones to run against a set of known valid and
invalid addresses. I think that it's better to accept a few invalid addresses than reject any valid ones, so I'm shooting for 0 false-negatives and as few false-positives as possible.

It's been about 5 years since I initially created this, and I think
we've found a relatively solid answer, but if you know of an expression
that tests better than the current one, or if you have some other
feedback feel free to contact me. If you feel think that any of the addresses are incorrectly labeled, please take it up with Cal Henderson or Dominic Sayers, since I've used their test data.

Notes

  • There's no perfect regular expression to validate e-mail addresses
  • If you need something more advanced than a simple regex, check out RFC 822/2822/5322 Email Address Parser in PHP or is_email() Address Validation.
  • I think it's better to allow any TLD, even if it doesn't exist,
    than to put a static list of currently-existing TLDs into the regex. The
    problem with a static list is that the regex will be used in production
    environments, but probably won't be updated when new TLDs come out.
  • Some of these are dependent on being executed using case-insenstive regex functions.
  • This page uses PHP's ereg() and preg_match() functions, but some of these will work with JavaScript and other languages
  • These regex's only check if the address is syntactically valid.
    It's entirely possible that an address which does not exist on any mail
    server would pass this test. Checking to see if an address actually
    exists isn't always practical or necessary, though.
  • Slow regex's can be a security risk.
  • Remember the Robustness Principle when handling addresses that fail to validate.
  • Some of the test addresses below are very long, and have been truncated for displaying.

Detailed Results

/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD

http://svn.php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c?view=markup
Uses preg_match()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org valid
"first@last"@iana.org valid
"first\last"@iana.org valid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] valid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] valid
first.last@[12.34.56.78] valid
first.last@[IPv6:::12.34.56.78] valid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] valid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] valid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] valid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] valid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] valid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] valid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org valid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org valid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] invalid
first.last@example.123 invalid
first.last@com invalid
"Abc\@def"@iana.org valid
"Fred\ Bloggs"@iana.org valid
"Joe.\Blow"@iana.org valid
"Abc@def"@iana.org valid
"Fred Bloggs"@iana.org invalid
user+mailbox@iana.org valid
customer/department=shipping@iana.org valid
$A12345@iana.org valid
!def!xyz%abc@iana.org valid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org invalid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org valid
test-test@iana.org valid
t*est@iana.org valid
+1~1+@iana.org valid
{_test_}@iana.org valid
"[[ test ]]"@iana.org invalid
test.test@iana.org valid
"test.test"@iana.org valid
test."test"@iana.org valid
"test@test"@iana.org valid
test@123.123.123.x123 valid
test@123.123.123.123 invalid
test@[123.123.123.123] valid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org valid
test@example invalid
"test\blah"@iana.org valid
"test\blah"@iana.org valid
"test\"blah"@iana.org valid
customer/department@iana.org valid
_Yosemite.Sam@iana.org valid
~@iana.org valid
"Austin@Powers"@iana.org valid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org valid
"Ima Fool"@iana.org invalid
"first"."last"@iana.org valid
"first".middle."last"@iana.org valid
"first".last@iana.org valid
first."last"@iana.org valid
"first"."middle"."last"@iana.org valid
"first.middle"."last"@iana.org valid
"first.middle.last"@iana.org valid
"first..last"@iana.org valid
"first\\\"last"@iana.org valid
first."mid\dle"."last"@iana.org valid
"test
blah"@iana.org
invalid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com invalid
cal(foo\@bar)@iamcal.com invalid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org invalid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org invalid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org invalid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] valid
a@bar invalid
a-b@bar.com valid
+@b.c valid
+@b.com valid
a@b.co-foo.uk valid
"hello my name is"@stutter.com invalid
"Test \"Fail\" Ing"@iana.org invalid
valid@about.museum valid
shaitan@my-domain.thisisminekthx valid
foobar@192.168.0.1 invalid
"Joe\Blow"@iana.org valid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu valid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com valid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] valid
first.last@[IPv6:::b4] valid
first.last@[IPv6:::b3:b4] valid
first.last@[IPv6:a1::b4] valid
first.last@[IPv6:a1::] valid
first.last@[IPv6:a1:a2::] valid
first.last@[IPv6:0123:4567:89ab:cdef::] valid
first.last@[IPv6:0123:4567:89ab:CDEF::] valid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] valid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] valid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] valid
first.last@[IPv6:a1:a2::11.22.33.44] valid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] valid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] valid
first.last@[IPv6:a1::b2:11.22.33.44] valid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org invalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] invalid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org invalid
.first.last@iana.org invalid
first.last.@iana.org invalid
first..last@iana.org invalid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org invalid
""@iana.org valid
first\@last@iana.org invalid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] invalid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com invalid
first.last@exampl-.com invalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org invalid
Doug\ \"Ace\"\ Lovell@iana.org invalid
abc@def@iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org invalid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org invalid
dot.@iana.org invalid
two..dot@iana.org invalid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org invalid
test..test@iana.org invalid
.test@iana.org invalid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] invalid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org invalid
wo..oly@iana.org invalid
pootietang.@iana.org invalid
.@iana.org invalid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com invalid
foo@[\1.2.3.4] invalid
first."".last@iana.org valid
first\last@iana.org invalid
Abc\@def@iana.org invalid
Fred\ Bloggs@iana.org invalid
Joe.\Blow@iana.org invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com invalid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com invalid
cal(foo)bar)@iamcal.com invalid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org invalid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org invalid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] invalid
a@bar.com. invalid
a@-b.com invalid
a@b-.com invalid
-@..com invalid
-@a..com invalid
invalid@about.museum- invalid
test@...........com invalid
"Unicode NULL "@char.com invalid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] invalid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] invalid
first.last@[IPv6:a1:a2:::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] invalid

Valid: 96/134
Invalid: 130/132

/^(?:(?:(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|\x5c(?=[@,"\[\]\x5c\x00-\x20\x7f-\xff]))(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|(?<=\x5c)[@,"\[\]\x5c\x00-\x20\x7f-\xff]|\x5c(?=[@,"\[\]\x5c\x00-\x20\x7f-\xff])|\.(?=[^\.])){1,62}(?:[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]|(?<=\x5c)[@,"\[\]\x5c\x00-\x20\x7f-\xff])|[^@,"\[\]\x5c\x00-\x20\x7f-\xff\.]{1,2})|"(?:[^"]|(?<=\x5c)"){1,62}")@(?:(?!.{64})(?:[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.?|[a-zA-Z0-9]\.?)+\.(?:xn--[a-zA-Z0-9]+|[a-zA-Z]{2,6})|\[(?:[0-1]?\d?\d|2[0-4]\d|25[0-5])(?:\.(?:[0-1]?\d?\d|2[0-4]\d|25[0-5])){3}\])$/

http://jgotti.net/
Uses preg_match()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org valid
"first@last"@iana.org valid
"first\last"@iana.org valid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] invalid
first.last@[12.34.56.78] valid
first.last@[IPv6:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] invalid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] invalid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org invalid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org valid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] invalid
first.last@example.123 invalid
first.last@com invalid
"Abc\@def"@iana.org valid
"Fred\ Bloggs"@iana.org valid
"Joe.\Blow"@iana.org valid
"Abc@def"@iana.org valid
"Fred Bloggs"@iana.org valid
user+mailbox@iana.org valid
customer/department=shipping@iana.org valid
$A12345@iana.org valid
!def!xyz%abc@iana.org valid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org valid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org valid
test-test@iana.org valid
t*est@iana.org valid
+1~1+@iana.org valid
{_test_}@iana.org valid
"[[ test ]]"@iana.org valid
test.test@iana.org valid
"test.test"@iana.org valid
test."test"@iana.org invalid
"test@test"@iana.org valid
test@123.123.123.x123 invalid
test@123.123.123.123 invalid
test@[123.123.123.123] valid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org valid
test@example invalid
"test\blah"@iana.org valid
"test\blah"@iana.org valid
"test\"blah"@iana.org valid
customer/department@iana.org valid
_Yosemite.Sam@iana.org valid
~@iana.org valid
"Austin@Powers"@iana.org valid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org valid
"Ima Fool"@iana.org valid
"first"."last"@iana.org invalid
"first".middle."last"@iana.org invalid
"first".last@iana.org invalid
first."last"@iana.org invalid
"first"."middle"."last"@iana.org invalid
"first.middle"."last"@iana.org invalid
"first.middle.last"@iana.org valid
"first..last"@iana.org valid
"first\\\"last"@iana.org valid
first."mid\dle"."last"@iana.org invalid
"test
blah"@iana.org
valid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com valid
cal(foo\@bar)@iamcal.com valid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org valid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org valid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org valid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] valid
a@bar invalid
a-b@bar.com valid
+@b.c invalid
+@b.com valid
a@b.co-foo.uk valid
"hello my name is"@stutter.com valid
"Test \"Fail\" Ing"@iana.org valid
valid@about.museum valid
shaitan@my-domain.thisisminekthx invalid
foobar@192.168.0.1 invalid
"Joe\Blow"@iana.org valid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu valid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com valid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] invalid
first.last@[IPv6:::b4] invalid
first.last@[IPv6:::b3:b4] invalid
first.last@[IPv6:a1::b4] invalid
first.last@[IPv6:a1::] invalid
first.last@[IPv6:a1:a2::] invalid
first.last@[IPv6:0123:4567:89ab:cdef::] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::] invalid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] invalid
first.last@[IPv6:a1:a2::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] invalid
first.last@[IPv6:a1::b2:11.22.33.44] invalid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org valid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] invalid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org invalid
.first.last@iana.org invalid
first.last.@iana.org invalid
first..last@iana.org invalid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org valid
""@iana.org invalid
first\@last@iana.org valid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] invalid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com invalid
first.last@exampl-.com invalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org invalid
abc\@def@iana.org valid
abc\@iana.org invalid
Doug\ \"Ace\"\ Lovell@iana.org valid
abc@def@iana.org invalid
abc\@def@iana.org valid
abc\@iana.org invalid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org invalid
dot.@iana.org invalid
two..dot@iana.org invalid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org invalid
test..test@iana.org invalid
.test@iana.org invalid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] invalid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org invalid
wo..oly@iana.org invalid
pootietang.@iana.org invalid
.@iana.org invalid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com valid
foo@[\1.2.3.4] invalid
first."".last@iana.org invalid
first\last@iana.org invalid
Abc\@def@iana.org valid
Fred\ Bloggs@iana.org valid
Joe.\Blow@iana.org invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com valid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com valid
cal(foo)bar)@iamcal.com valid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org valid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org valid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] invalid
a@bar.com. invalid
a@-b.com invalid
a@b-.com invalid
-@..com invalid
-@a..com valid
invalid@about.museum- invalid
test@...........com invalid
"Unicode NULL "@char.com valid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] invalid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] invalid
first.last@[IPv6:a1:a2:::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] invalid

Valid: 72/134
Invalid: 116/132

/\A([a-z0-9!#$%&'*+\/=?^_`{|}~-]+(\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"([\040-\041\043-\133\135-\176]|\134[\040-\176])*")@([0-9a-z]([0-9a-z-]*[0-9a-z])?(\.[0-9a-z]([0-9a-z-]*[0-9a-z])?)+|\[((0|[1-9][0-9]{0,2})(.(0|[1-9][0-9]{0,2})){3}|IPv6:([0-9a-f]{1,4}(:[0-9a-f]{1,4}){7}|([0-9a-f]{1,4}(:[0-9a-f]{1,4}){0,5})?::([0-9a-f]{1,4}(:[0-9a-f]{1,4}){0,5})?|[0-9a-f]{1,4}(:[0-9a-f]{1,4}){3}:(0|[1-9][0-9]{0,2})(.(0|[1-9][0-9]{0,2})){3}|([0-9a-f]{1,4}(:[0-9a-f]{1,4}){0,3})?::([0-9a-f]{1,4}(:[0-9a-f]{1,4}){0,3})?:(0|[1-9][0-9]{0,2})(.(0|[1-9][0-9]{0,2})){3}))\])\Z/i

Peter Bowen
Uses preg_match()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org valid
"first@last"@iana.org valid
"first\last"@iana.org valid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] valid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] valid
first.last@[12.34.56.78] valid
first.last@[IPv6:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] valid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] invalid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] valid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] valid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] valid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] valid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org valid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org valid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] valid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] valid
first.last@example.123 valid
first.last@com invalid
"Abc\@def"@iana.org valid
"Fred\ Bloggs"@iana.org valid
"Joe.\Blow"@iana.org valid
"Abc@def"@iana.org valid
"Fred Bloggs"@iana.org valid
user+mailbox@iana.org valid
customer/department=shipping@iana.org valid
$A12345@iana.org valid
!def!xyz%abc@iana.org valid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org valid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org valid
test-test@iana.org valid
t*est@iana.org valid
+1~1+@iana.org valid
{_test_}@iana.org valid
"[[ test ]]"@iana.org valid
test.test@iana.org valid
"test.test"@iana.org valid
test."test"@iana.org invalid
"test@test"@iana.org valid
test@123.123.123.x123 valid
test@123.123.123.123 valid
test@[123.123.123.123] valid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org valid
test@example invalid
"test\blah"@iana.org valid
"test\blah"@iana.org valid
"test\"blah"@iana.org valid
customer/department@iana.org valid
_Yosemite.Sam@iana.org valid
~@iana.org valid
"Austin@Powers"@iana.org valid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org valid
"Ima Fool"@iana.org valid
"first"."last"@iana.org invalid
"first".middle."last"@iana.org invalid
"first".last@iana.org invalid
first."last"@iana.org invalid
"first"."middle"."last"@iana.org invalid
"first.middle"."last"@iana.org invalid
"first.middle.last"@iana.org valid
"first..last"@iana.org valid
"first\\\"last"@iana.org valid
first."mid\dle"."last"@iana.org invalid
"test
blah"@iana.org
invalid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com invalid
cal(foo\@bar)@iamcal.com invalid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org invalid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org invalid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org invalid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] valid
a@bar invalid
a-b@bar.com valid
+@b.c valid
+@b.com valid
a@b.co-foo.uk valid
"hello my name is"@stutter.com valid
"Test \"Fail\" Ing"@iana.org valid
valid@about.museum valid
shaitan@my-domain.thisisminekthx valid
foobar@192.168.0.1 valid
"Joe\Blow"@iana.org valid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu valid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com valid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] valid
first.last@[IPv6:::b4] valid
first.last@[IPv6:::b3:b4] valid
first.last@[IPv6:a1::b4] valid
first.last@[IPv6:a1::] valid
first.last@[IPv6:a1:a2::] valid
first.last@[IPv6:0123:4567:89ab:cdef::] valid
first.last@[IPv6:0123:4567:89ab:CDEF::] valid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] valid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] invalid
first.last@[IPv6:a1:a2::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] invalid
first.last@[IPv6:a1::b2:11.22.33.44] valid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org invalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] valid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org valid
.first.last@iana.org invalid
first.last.@iana.org invalid
first..last@iana.org invalid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org invalid
""@iana.org valid
first\@last@iana.org invalid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] valid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] valid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com invalid
first.last@exampl-.com invalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org valid
abc\@def@iana.org invalid
abc\@iana.org invalid
Doug\ \"Ace\"\ Lovell@iana.org invalid
abc@def@iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org invalid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org invalid
dot.@iana.org invalid
two..dot@iana.org invalid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org invalid
test..test@iana.org invalid
.test@iana.org invalid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] valid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org invalid
wo..oly@iana.org invalid
pootietang.@iana.org invalid
.@iana.org invalid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com invalid
foo@[\1.2.3.4] invalid
first."".last@iana.org invalid
first\last@iana.org invalid
Abc\@def@iana.org invalid
Fred\ Bloggs@iana.org invalid
Joe.\Blow@iana.org invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com invalid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com invalid
cal(foo)bar)@iamcal.com invalid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org invalid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org invalid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] valid
a@bar.com. invalid
a@-b.com invalid
a@b-.com invalid
-@..com invalid
-@a..com invalid
invalid@about.museum- invalid
test@...........com invalid
"Unicode NULL "@char.com invalid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] valid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] valid
first.last@[IPv6:a1:a2:::11.22.33.44] valid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] valid

Valid: 92/134
Invalid: 120/132

/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i

James Watts and Francisco Jose Martin Moreno
Uses preg_match()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org invalid
"first@last"@iana.org invalid
"first\last"@iana.org invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] valid
first.last@[12.34.56.78] invalid
first.last@[IPv6:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] invalid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] invalid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org valid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org invalid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] invalid
first.last@example.123 invalid
first.last@com invalid
"Abc\@def"@iana.org invalid
"Fred\ Bloggs"@iana.org invalid
"Joe.\Blow"@iana.org invalid
"Abc@def"@iana.org invalid
"Fred Bloggs"@iana.org invalid
user+mailbox@iana.org valid
customer/department=shipping@iana.org valid
$A12345@iana.org valid
!def!xyz%abc@iana.org valid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org invalid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org valid
test-test@iana.org valid
t*est@iana.org valid
+1~1+@iana.org valid
{_test_}@iana.org valid
"[[ test ]]"@iana.org invalid
test.test@iana.org valid
"test.test"@iana.org invalid
test."test"@iana.org invalid
"test@test"@iana.org invalid
test@123.123.123.x123 invalid
test@123.123.123.123 valid
test@[123.123.123.123] invalid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org invalid
test@example invalid
"test\blah"@iana.org invalid
"test\blah"@iana.org invalid
"test\"blah"@iana.org invalid
customer/department@iana.org valid
_Yosemite.Sam@iana.org valid
~@iana.org valid
"Austin@Powers"@iana.org invalid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org invalid
"Ima Fool"@iana.org invalid
"first"."last"@iana.org invalid
"first".middle."last"@iana.org invalid
"first".last@iana.org invalid
first."last"@iana.org invalid
"first"."middle"."last"@iana.org invalid
"first.middle"."last"@iana.org invalid
"first.middle.last"@iana.org invalid
"first..last"@iana.org invalid
"first\\\"last"@iana.org invalid
first."mid\dle"."last"@iana.org invalid
"test
blah"@iana.org
invalid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com invalid
cal(foo\@bar)@iamcal.com invalid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org invalid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org invalid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org invalid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] invalid
a@bar invalid
a-b@bar.com valid
+@b.c invalid
+@b.com valid
a@b.co-foo.uk valid
"hello my name is"@stutter.com invalid
"Test \"Fail\" Ing"@iana.org invalid
valid@about.museum valid
shaitan@my-domain.thisisminekthx invalid
foobar@192.168.0.1 valid
"Joe\Blow"@iana.org invalid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu valid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com valid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] invalid
first.last@[IPv6:::b4] invalid
first.last@[IPv6:::b3:b4] invalid
first.last@[IPv6:a1::b4] invalid
first.last@[IPv6:a1::] invalid
first.last@[IPv6:a1:a2::] invalid
first.last@[IPv6:0123:4567:89ab:cdef::] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::] invalid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] invalid
first.last@[IPv6:a1:a2::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] invalid
first.last@[IPv6:a1::b2:11.22.33.44] invalid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org invalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] valid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org valid
.first.last@iana.org invalid
first.last.@iana.org invalid
first..last@iana.org invalid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org invalid
""@iana.org invalid
first\@last@iana.org invalid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] invalid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com invalid
first.last@exampl-.com invalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org valid
abc\@def@iana.org invalid
abc\@iana.org invalid
Doug\ \"Ace\"\ Lovell@iana.org invalid
abc@def@iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org invalid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org invalid
dot.@iana.org invalid
two..dot@iana.org invalid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org invalid
test..test@iana.org invalid
.test@iana.org invalid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] invalid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org invalid
wo..oly@iana.org invalid
pootietang.@iana.org invalid
.@iana.org invalid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com invalid
foo@[\1.2.3.4] invalid
first."".last@iana.org invalid
first\last@iana.org invalid
Abc\@def@iana.org invalid
Fred\ Bloggs@iana.org invalid
Joe.\Blow@iana.org invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com invalid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com invalid
cal(foo)bar)@iamcal.com invalid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org invalid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org invalid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] invalid
a@bar.com. invalid
a@-b.com invalid
a@b-.com invalid
-@..com invalid
-@a..com invalid
invalid@about.museum- invalid
test@...........com invalid
"Unicode NULL "@char.com invalid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] invalid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] invalid
first.last@[IPv6:a1:a2:::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] invalid

Valid: 41/134
Invalid: 129/132

/^[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?$/iD

http://pastie.textmate.org/159503
Uses preg_match()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org invalid
"first@last"@iana.org invalid
"first\last"@iana.org invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] valid
first.last@[12.34.56.78] invalid
first.last@[IPv6:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] invalid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] invalid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org valid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org invalid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] invalid
first.last@example.123 invalid
first.last@com invalid
"Abc\@def"@iana.org invalid
"Fred\ Bloggs"@iana.org invalid
"Joe.\Blow"@iana.org invalid
"Abc@def"@iana.org invalid
"Fred Bloggs"@iana.org invalid
user+mailbox@iana.org valid
customer/department=shipping@iana.org invalid
$A12345@iana.org valid
!def!xyz%abc@iana.org valid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org invalid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org valid
test-test@iana.org valid
t*est@iana.org valid
+1~1+@iana.org valid
{_test_}@iana.org valid
"[[ test ]]"@iana.org invalid
test.test@iana.org valid
"test.test"@iana.org invalid
test."test"@iana.org invalid
"test@test"@iana.org invalid
test@123.123.123.x123 invalid
test@123.123.123.123 valid
test@[123.123.123.123] invalid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org invalid
test@example invalid
"test\blah"@iana.org invalid
"test\blah"@iana.org invalid
"test\"blah"@iana.org invalid
customer/department@iana.org invalid
_Yosemite.Sam@iana.org valid
~@iana.org valid
"Austin@Powers"@iana.org invalid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org invalid
"Ima Fool"@iana.org invalid
"first"."last"@iana.org invalid
"first".middle."last"@iana.org invalid
"first".last@iana.org invalid
first."last"@iana.org invalid
"first"."middle"."last"@iana.org invalid
"first.middle"."last"@iana.org invalid
"first.middle.last"@iana.org invalid
"first..last"@iana.org invalid
"first\\\"last"@iana.org invalid
first."mid\dle"."last"@iana.org invalid
"test
blah"@iana.org
invalid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com invalid
cal(foo\@bar)@iamcal.com invalid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org invalid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org invalid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org invalid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] invalid
a@bar invalid
a-b@bar.com valid
+@b.c invalid
+@b.com valid
a@b.co-foo.uk valid
"hello my name is"@stutter.com invalid
"Test \"Fail\" Ing"@iana.org invalid
valid@about.museum valid
shaitan@my-domain.thisisminekthx invalid
foobar@192.168.0.1 valid
"Joe\Blow"@iana.org invalid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu valid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com invalid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] invalid
first.last@[IPv6:::b4] invalid
first.last@[IPv6:::b3:b4] invalid
first.last@[IPv6:a1::b4] invalid
first.last@[IPv6:a1::] invalid
first.last@[IPv6:a1:a2::] invalid
first.last@[IPv6:0123:4567:89ab:cdef::] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::] invalid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] invalid
first.last@[IPv6:a1:a2::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] invalid
first.last@[IPv6:a1::b2:11.22.33.44] invalid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org invalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] valid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org valid
.first.last@iana.org invalid
first.last.@iana.org invalid
first..last@iana.org invalid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org invalid
""@iana.org invalid
first\@last@iana.org invalid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] invalid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com invalid
first.last@exampl-.com invalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org valid
abc\@def@iana.org invalid
abc\@iana.org invalid
Doug\ \"Ace\"\ Lovell@iana.org invalid
abc@def@iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org invalid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org invalid
dot.@iana.org invalid
two..dot@iana.org invalid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org invalid
test..test@iana.org invalid
.test@iana.org invalid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] valid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org invalid
wo..oly@iana.org invalid
pootietang.@iana.org invalid
.@iana.org invalid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com invalid
foo@[\1.2.3.4] invalid
first."".last@iana.org invalid
first\last@iana.org invalid
Abc\@def@iana.org invalid
Fred\ Bloggs@iana.org invalid
Joe.\Blow@iana.org invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com invalid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com invalid
cal(foo)bar)@iamcal.com invalid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org invalid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org invalid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] invalid
a@bar.com. invalid
a@-b.com invalid
a@b-.com invalid
-@..com invalid
-@a..com invalid
invalid@about.museum- invalid
test@...........com invalid
"Unicode NULL "@char.com invalid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] invalid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] invalid
first.last@[IPv6:a1:a2:::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] invalid

Valid: 38/134
Invalid: 128/132

/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.([a-z][a-z]+)|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i

http://www.mi-ange.net/blog/msg.php?id=79&lng=en
Uses preg_match()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org invalid
"first@last"@iana.org invalid
"first\last"@iana.org invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] valid
first.last@[12.34.56.78] invalid
first.last@[IPv6:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] invalid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] invalid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org valid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org invalid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] invalid
first.last@example.123 invalid
first.last@com invalid
"Abc\@def"@iana.org invalid
"Fred\ Bloggs"@iana.org invalid
"Joe.\Blow"@iana.org invalid
"Abc@def"@iana.org invalid
"Fred Bloggs"@iana.org invalid
user+mailbox@iana.org valid
customer/department=shipping@iana.org invalid
$A12345@iana.org valid
!def!xyz%abc@iana.org valid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org invalid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org valid
test-test@iana.org valid
t*est@iana.org valid
+1~1+@iana.org valid
{_test_}@iana.org valid
"[[ test ]]"@iana.org invalid
test.test@iana.org valid
"test.test"@iana.org invalid
test."test"@iana.org invalid
"test@test"@iana.org invalid
test@123.123.123.x123 invalid
test@123.123.123.123 valid
test@[123.123.123.123] invalid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org invalid
test@example invalid
"test\blah"@iana.org invalid
"test\blah"@iana.org invalid
"test\"blah"@iana.org invalid
customer/department@iana.org invalid
_Yosemite.Sam@iana.org valid
~@iana.org valid
"Austin@Powers"@iana.org invalid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org invalid
"Ima Fool"@iana.org invalid
"first"."last"@iana.org invalid
"first".middle."last"@iana.org invalid
"first".last@iana.org invalid
first."last"@iana.org invalid
"first"."middle"."last"@iana.org invalid
"first.middle"."last"@iana.org invalid
"first.middle.last"@iana.org invalid
"first..last"@iana.org invalid
"first\\\"last"@iana.org invalid
first."mid\dle"."last"@iana.org invalid
"test
blah"@iana.org
invalid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com invalid
cal(foo\@bar)@iamcal.com invalid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org invalid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org invalid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org invalid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] invalid
a@bar invalid
a-b@bar.com valid
+@b.c invalid
+@b.com valid
a@b.co-foo.uk valid
"hello my name is"@stutter.com invalid
"Test \"Fail\" Ing"@iana.org invalid
valid@about.museum valid
shaitan@my-domain.thisisminekthx valid
foobar@192.168.0.1 valid
"Joe\Blow"@iana.org invalid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu valid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com invalid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] invalid
first.last@[IPv6:::b4] invalid
first.last@[IPv6:::b3:b4] invalid
first.last@[IPv6:a1::b4] invalid
first.last@[IPv6:a1::] invalid
first.last@[IPv6:a1:a2::] invalid
first.last@[IPv6:0123:4567:89ab:cdef::] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::] invalid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] invalid
first.last@[IPv6:a1:a2::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] invalid
first.last@[IPv6:a1::b2:11.22.33.44] invalid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org invalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] valid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org valid
.first.last@iana.org invalid
first.last.@iana.org invalid
first..last@iana.org invalid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org invalid
""@iana.org invalid
first\@last@iana.org invalid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] invalid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com invalid
first.last@exampl-.com valid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org valid
abc\@def@iana.org invalid
abc\@iana.org invalid
Doug\ \"Ace\"\ Lovell@iana.org invalid
abc@def@iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org invalid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org invalid
dot.@iana.org invalid
two..dot@iana.org invalid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org invalid
test..test@iana.org invalid
.test@iana.org invalid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] valid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org invalid
wo..oly@iana.org invalid
pootietang.@iana.org invalid
.@iana.org invalid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com invalid
foo@[\1.2.3.4] invalid
first."".last@iana.org invalid
first\last@iana.org invalid
Abc\@def@iana.org invalid
Fred\ Bloggs@iana.org invalid
Joe.\Blow@iana.org invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com invalid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com invalid
cal(foo)bar)@iamcal.com invalid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org invalid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org invalid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] invalid
a@bar.com. invalid
a@-b.com invalid
a@b-.com valid
-@..com invalid
-@a..com invalid
invalid@about.museum- invalid
test@...........com invalid
"Unicode NULL "@char.com invalid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] invalid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] invalid
first.last@[IPv6:a1:a2:::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] invalid

Valid: 39/134
Invalid: 126/132

^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$

http://www.quirksmode.org/js/mailcheck.html
Uses eregi()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org invalid
"first@last"@iana.org invalid
"first\last"@iana.org invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] valid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] valid
first.last@[12.34.56.78] invalid
first.last@[IPv6:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] invalid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] invalid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org valid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org invalid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] invalid
first.last@example.123 valid
first.last@com invalid
"Abc\@def"@iana.org invalid
"Fred\ Bloggs"@iana.org invalid
"Joe.\Blow"@iana.org invalid
"Abc@def"@iana.org invalid
"Fred Bloggs"@iana.org invalid
user+mailbox@iana.org invalid
customer/department=shipping@iana.org invalid
$A12345@iana.org invalid
!def!xyz%abc@iana.org invalid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org invalid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org invalid
test-test@iana.org valid
t*est@iana.org invalid
+1~1+@iana.org invalid
{_test_}@iana.org invalid
"[[ test ]]"@iana.org invalid
test.test@iana.org valid
"test.test"@iana.org invalid
test."test"@iana.org invalid
"test@test"@iana.org invalid
test@123.123.123.x123 valid
test@123.123.123.123 valid
test@[123.123.123.123] invalid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org invalid
test@example invalid
"test\blah"@iana.org invalid
"test\blah"@iana.org invalid
"test\"blah"@iana.org invalid
customer/department@iana.org invalid
_Yosemite.Sam@iana.org valid
~@iana.org invalid
"Austin@Powers"@iana.org invalid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org invalid
"Ima Fool"@iana.org invalid
"first"."last"@iana.org invalid
"first".middle."last"@iana.org invalid
"first".last@iana.org invalid
first."last"@iana.org invalid
"first"."middle"."last"@iana.org invalid
"first.middle"."last"@iana.org invalid
"first.middle.last"@iana.org invalid
"first..last"@iana.org invalid
"first\\\"last"@iana.org invalid
first."mid\dle"."last"@iana.org invalid
"test
blah"@iana.org
invalid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com invalid
cal(foo\@bar)@iamcal.com invalid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org invalid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org invalid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org invalid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] invalid
a@bar invalid
a-b@bar.com valid
+@b.c invalid
+@b.com invalid
a@b.co-foo.uk valid
"hello my name is"@stutter.com invalid
"Test \"Fail\" Ing"@iana.org invalid
valid@about.museum valid
shaitan@my-domain.thisisminekthx valid
foobar@192.168.0.1 invalid
"Joe\Blow"@iana.org invalid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu invalid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com invalid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] invalid
first.last@[IPv6:::b4] invalid
first.last@[IPv6:::b3:b4] invalid
first.last@[IPv6:a1::b4] invalid
first.last@[IPv6:a1::] invalid
first.last@[IPv6:a1:a2::] invalid
first.last@[IPv6:0123:4567:89ab:cdef::] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::] invalid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] invalid
first.last@[IPv6:a1:a2::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] invalid
first.last@[IPv6:a1::b2:11.22.33.44] invalid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org invalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] valid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org valid
.first.last@iana.org valid
first.last.@iana.org valid
first..last@iana.org valid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org invalid
""@iana.org invalid
first\@last@iana.org invalid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] valid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] invalid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com valid
first.last@exampl-.com valid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org valid
abc\@def@iana.org invalid
abc\@iana.org valid
Doug\ \"Ace\"\ Lovell@iana.org invalid
abc@def@iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org valid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org valid
dot.@iana.org valid
two..dot@iana.org valid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org valid
test..test@iana.org valid
.test@iana.org valid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] valid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org valid
wo..oly@iana.org valid
pootietang.@iana.org valid
.@iana.org valid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com invalid
foo@[\1.2.3.4] invalid
first."".last@iana.org invalid
first\last@iana.org valid
Abc\@def@iana.org invalid
Fred\ Bloggs@iana.org invalid
Joe.\Blow@iana.org valid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com invalid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com invalid
cal(foo)bar)@iamcal.com invalid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org invalid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org invalid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] invalid
a@bar.com. invalid
a@-b.com valid
a@b-.com valid
-@..com invalid
-@a..com invalid
invalid@about.museum- invalid
test@...........com invalid
"Unicode NULL "@char.com invalid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] invalid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] invalid
first.last@[IPv6:a1:a2:::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] invalid

Valid: 31/134
Invalid: 106/132

^[a-z0-9\._-]+@([a-z0-9][a-z0-9-]*[a-z0-9]\.)+([a-z]+\.)?([a-z]+)$

http://www.zend.com/zend/spotlight/code-gallery-wade5.php?article=code-gallery-wade5&kind=sl&id=1988&open=1&anc=0&view=1#Heading10
Uses eregi()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org invalid
"first@last"@iana.org invalid
"first\last"@iana.org invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] valid
first.last@[12.34.56.78] invalid
first.last@[IPv6:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] invalid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] invalid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org valid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org invalid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] invalid
first.last@example.123 invalid
first.last@com invalid
"Abc\@def"@iana.org invalid
"Fred\ Bloggs"@iana.org invalid
"Joe.\Blow"@iana.org invalid
"Abc@def"@iana.org invalid
"Fred Bloggs"@iana.org invalid
user+mailbox@iana.org invalid
customer/department=shipping@iana.org invalid
$A12345@iana.org invalid
!def!xyz%abc@iana.org invalid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org invalid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org invalid
test-test@iana.org valid
t*est@iana.org invalid
+1~1+@iana.org invalid
{_test_}@iana.org invalid
"[[ test ]]"@iana.org invalid
test.test@iana.org valid
"test.test"@iana.org invalid
test."test"@iana.org invalid
"test@test"@iana.org invalid
test@123.123.123.x123 invalid
test@123.123.123.123 invalid
test@[123.123.123.123] invalid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org invalid
test@example invalid
"test\blah"@iana.org invalid
"test\blah"@iana.org invalid
"test\"blah"@iana.org invalid
customer/department@iana.org invalid
_Yosemite.Sam@iana.org valid
~@iana.org invalid
"Austin@Powers"@iana.org invalid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org invalid
"Ima Fool"@iana.org invalid
"first"."last"@iana.org invalid
"first".middle."last"@iana.org invalid
"first".last@iana.org invalid
first."last"@iana.org invalid
"first"."middle"."last"@iana.org invalid
"first.middle"."last"@iana.org invalid
"first.middle.last"@iana.org invalid
"first..last"@iana.org invalid
"first\\\"last"@iana.org invalid
first."mid\dle"."last"@iana.org invalid
"test
blah"@iana.org
invalid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com invalid
cal(foo\@bar)@iamcal.com invalid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org invalid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org invalid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org invalid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] invalid
a@bar invalid
a-b@bar.com valid
+@b.c invalid
+@b.com invalid
a@b.co-foo.uk invalid
"hello my name is"@stutter.com invalid
"Test \"Fail\" Ing"@iana.org invalid
valid@about.museum valid
shaitan@my-domain.thisisminekthx valid
foobar@192.168.0.1 invalid
"Joe\Blow"@iana.org invalid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu invalid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com invalid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] invalid
first.last@[IPv6:::b4] invalid
first.last@[IPv6:::b3:b4] invalid
first.last@[IPv6:a1::b4] invalid
first.last@[IPv6:a1::] invalid
first.last@[IPv6:a1:a2::] invalid
first.last@[IPv6:0123:4567:89ab:cdef::] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::] invalid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] invalid
first.last@[IPv6:a1:a2::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] invalid
first.last@[IPv6:a1::b2:11.22.33.44] invalid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org invalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] valid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org valid
.first.last@iana.org valid
first.last.@iana.org valid
first..last@iana.org valid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org invalid
""@iana.org invalid
first\@last@iana.org invalid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] invalid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com invalid
first.last@exampl-.com invalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org valid
abc\@def@iana.org invalid
abc\@iana.org valid
Doug\ \"Ace\"\ Lovell@iana.org invalid
abc@def@iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org valid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org valid
dot.@iana.org valid
two..dot@iana.org valid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org valid
test..test@iana.org valid
.test@iana.org valid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] valid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org valid
wo..oly@iana.org valid
pootietang.@iana.org valid
.@iana.org valid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com invalid
foo@[\1.2.3.4] invalid
first."".last@iana.org invalid
first\last@iana.org valid
Abc\@def@iana.org invalid
Fred\ Bloggs@iana.org invalid
Joe.\Blow@iana.org valid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com invalid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com invalid
cal(foo)bar)@iamcal.com invalid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org invalid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org invalid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] invalid
a@bar.com. invalid
a@-b.com invalid
a@b-.com invalid
-@..com invalid
-@a..com invalid
invalid@about.museum- invalid
test@...........com invalid
"Unicode NULL "@char.com invalid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] invalid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] invalid
first.last@[IPv6:a1:a2:::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] invalid

Valid: 26/134
Invalid: 111/132

^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

http://www.regular-expressions.info/email.html
Uses eregi()

These should be valid
first.last@iana.org valid
1234567890123456789012345678901234567890123456789012345678901234@iana.org valid
"first\"last"@iana.org invalid
"first@last"@iana.org invalid
"first\last"@iana.org invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
1234567890123456789012345678901234567890123456789012345678@1234567890123456789012345678901234567890123456 [...] valid
first.last@[12.34.56.78] invalid
first.last@[IPv6:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] invalid
first.last@[IPv6:::1111:2222:3333:4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666::] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] invalid
first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org valid
first.last@3com.com valid
first.last@123.iana.org valid
"first\last"@iana.org invalid
first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] invalid
first.last@example.123 invalid
first.last@com invalid
"Abc\@def"@iana.org invalid
"Fred\ Bloggs"@iana.org invalid
"Joe.\Blow"@iana.org invalid
"Abc@def"@iana.org invalid
"Fred Bloggs"@iana.org invalid
user+mailbox@iana.org invalid
customer/department=shipping@iana.org invalid
$A12345@iana.org invalid
!def!xyz%abc@iana.org invalid
_somename@iana.org valid
dclo@us.ibm.com valid
peter.piper@iana.org valid
"Doug \"Ace\" L."@iana.org invalid
test@iana.org valid
TEST@iana.org valid
1234567890@iana.org valid
test+test@iana.org invalid
test-test@iana.org valid
t*est@iana.org invalid
+1~1+@iana.org invalid
{_test_}@iana.org invalid
"[[ test ]]"@iana.org invalid
test.test@iana.org valid
"test.test"@iana.org invalid
test."test"@iana.org invalid
"test@test"@iana.org invalid
test@123.123.123.x123 invalid
test@123.123.123.123 invalid
test@[123.123.123.123] invalid
test@example.iana.org valid
test@example.example.iana.org valid
"test\test"@iana.org invalid
test@example invalid
"test\blah"@iana.org invalid
"test\blah"@iana.org invalid
"test\"blah"@iana.org invalid
customer/department@iana.org invalid
_Yosemite.Sam@iana.org valid
~@iana.org invalid
"Austin@Powers"@iana.org invalid
Ima.Fool@iana.org valid
"Ima.Fool"@iana.org invalid
"Ima Fool"@iana.org invalid
"first"."last"@iana.org invalid
"first".middle."last"@iana.org invalid
"first".last@iana.org invalid
first."last"@iana.org invalid
"first"."middle"."last"@iana.org invalid
"first.middle"."last"@iana.org invalid
"first.middle.last"@iana.org invalid
"first..last"@iana.org invalid
"first\\\"last"@iana.org invalid
first."mid\dle"."last"@iana.org invalid
"test
blah"@iana.org
invalid
(foo)cal(bar)@(baz)iamcal.com(quux) invalid
cal@iamcal(woo).(yay)com invalid
cal(woo(yay)hoopla)@iamcal.com invalid
cal(foo\@bar)@iamcal.com invalid
cal(foo\)bar)@iamcal.com invalid
first().last@iana.org invalid
pete(his account)@silly.test(his host) invalid
c@(Chris's host.)public.example invalid
jdoe@machine(comment). example invalid
1234 @ local(blah) .machine .example invalid
first(abc.def).last@iana.org invalid
first(a"bc.def).last@iana.org invalid
first.(")middle.last(")@iana.org invalid
first(abc\(def)@iana.org invalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com invalid
a(a(b(c)d(e(f))g)h(i)j)@iana.org invalid
name.lastname@domain.com valid
a@b invalid
a@bar.com valid
aaa@[123.123.123.123] invalid
a@bar invalid
a-b@bar.com valid
+@b.c invalid
+@b.com invalid
a@b.co-foo.uk valid
"hello my name is"@stutter.com invalid
"Test \"Fail\" Ing"@iana.org invalid
valid@about.museum invalid
shaitan@my-domain.thisisminekthx invalid
foobar@192.168.0.1 invalid
"Joe\Blow"@iana.org invalid
HM2Kinsists@(that comments are allowed)this.is.ok invalid
user%uucp!path@berkeley.edu invalid
first.last @iana.org invalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com invalid
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] invalid
first.last@[IPv6:::] invalid
first.last@[IPv6:::b4] invalid
first.last@[IPv6:::b3:b4] invalid
first.last@[IPv6:a1::b4] invalid
first.last@[IPv6:a1::] invalid
first.last@[IPv6:a1:a2::] invalid
first.last@[IPv6:0123:4567:89ab:cdef::] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::] invalid
first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] invalid
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33.44] invalid
first.last@[IPv6:a1:a2::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] invalid
first.last@[IPv6:a1::b2:11.22.33.44] invalid
test@test.com valid
test@xn--example.com valid
test@example.com valid
 
These should be invalid
first.last@sub.do,com invalid
first\@last@iana.org invalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...] valid
first.last invalid
12345678901234567890123456789012345678901234567890123456789012345@iana.org valid
.first.last@iana.org valid
first.last.@iana.org valid
first..last@iana.org valid
"first"last"@iana.org invalid
"""@iana.org invalid
"\"@iana.org invalid
""@iana.org invalid
first\@last@iana.org invalid
first.last@ invalid
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23 [...] invalid
first.last@[.12.34.56.78] invalid
first.last@[12.34.56.789] invalid
first.last@[::12.34.56.78] invalid
first.last@[IPv5:::12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] invalid
first.last@[IPv6:1111:2222::3333::4444:5555:6666] invalid
first.last@[IPv6:1111:2222:333x::4444:5555] invalid
first.last@[IPv6:1111:2222:33333::4444:5555] invalid
first.last@-xample.com valid
first.last@exampl-.com valid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org valid
abc\@def@iana.org invalid
abc\@iana.org invalid
Doug\ \"Ace\"\ Lovell@iana.org invalid
abc@def@iana.org invalid
abc\@def@iana.org invalid
abc\@iana.org invalid
@iana.org invalid
doug@ invalid
"qu@iana.org invalid
ote"@iana.org invalid
.dot@iana.org valid
dot.@iana.org valid
two..dot@iana.org valid
"Doug "Ace" L."@iana.org invalid
Doug\ \"Ace\"\ L\.@iana.org invalid
hello world@iana.org invalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d. invalid
test.iana.org invalid
test.@iana.org valid
test..test@iana.org valid
.test@iana.org valid
test@test@iana.org invalid
test@@iana.org invalid
-- test --@iana.org invalid
[test]@iana.org invalid
"test"test"@iana.org invalid
()[]\;:,><@iana.org invalid
test@. invalid
test@example. invalid
test@.org invalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...] valid
test@[123.123.123.123 invalid
test@123.123.123.123] invalid
NotAnEmail invalid
@NotAnEmail invalid
"test"blah"@iana.org invalid
.wooly@iana.org valid
wo..oly@iana.org valid
pootietang.@iana.org valid
.@iana.org valid
Ima Fool@iana.org invalid
phil.h\@\@ck@haacked.com invalid
foo@[\1.2.3.4] invalid
first."".last@iana.org invalid
first\last@iana.org invalid
Abc\@def@iana.org invalid
Fred\ Bloggs@iana.org invalid
Joe.\Blow@iana.org invalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] invalid
{^c\@**Dog^}@cartoon.com invalid
"foo"(yay)@(hoopla)[1.2.3.4] invalid
cal(foo(bar)@iamcal.com invalid
cal(foo)bar)@iamcal.com invalid
cal(foo\)@iamcal.com invalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...] invalid
first(middle)last@iana.org invalid
first(abc("def".ghi).mno)middle(abc("def".ghi).mno).last@(abc("def".ghi).mno)example(abc("def".ghi).mno). [...] invalid
a(a(b(c)d(e(f))g)(h(i)j)@iana.org invalid
.@ invalid
@bar.com invalid
@@bar.com invalid
aaa.com invalid
aaa@.com invalid
aaa@.123 invalid
aaa@[123.123.123.123]a invalid
aaa@[123.123.123.333] invalid
a@bar.com. invalid
a@-b.com valid
a@b-.com valid
-@..com valid
-@a..com valid
invalid@about.museum- invalid
test@...........com valid
"Unicode NULL "@char.com invalid
Unicode NULL @char.com invalid
first.last@[IPv6::] invalid
first.last@[IPv6::::] invalid
first.last@[IPv6::b4] invalid
first.last@[IPv6::::b4] invalid
first.last@[IPv6::b3:b4] invalid
first.last@[IPv6::::b3:b4] invalid
first.last@[IPv6:a1:::b4] invalid
first.last@[IPv6:a1:] invalid
first.last@[IPv6:a1:::] invalid
first.last@[IPv6:a1:a2:] invalid
first.last@[IPv6:a1:a2:::] invalid
first.last@[IPv6::11.22.33.44] invalid
first.last@[IPv6::::11.22.33.44] invalid
first.last@[IPv6:a1:11.22.33.44] invalid
first.last@[IPv6:a1:::11.22.33.44] invalid
first.last@[IPv6:a1:a2:::11.22.33.44] invalid
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] invalid
first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] invalid
first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] invalid
first.last@[IPv6:a1::11.22.33] invalid
first.last@[IPv6:a1::11.22.33.44.55] invalid
first.last@[IPv6:a1::b211.22.33.44] invalid
first.last@[IPv6:a1::b2::11.22.33.44] invalid
first.last@[IPv6:a1::b3:] invalid
first.last@[IPv6::a2::b4] invalid
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] invalid
first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] invalid
first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] invalid

Valid: 25/134
Invalid: 108/132