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

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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orgvalid
"first@last"@iana.orgvalid
"first\last"@iana.orgvalid
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.orgvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orgvalid
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.123invalid
first.last@cominvalid
"Abc\@def"@iana.orgvalid
"Fred\ Bloggs"@iana.orgvalid
"Joe.\Blow"@iana.orgvalid
"Abc@def"@iana.orgvalid
"Fred Bloggs"@iana.orginvalid
user+mailbox@iana.orgvalid
customer/department=shipping@iana.orgvalid
$A12345@iana.orgvalid
!def!xyz%abc@iana.orgvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orginvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orgvalid
test-test@iana.orgvalid
t*est@iana.orgvalid
+1~1+@iana.orgvalid
{_test_}@iana.orgvalid
"[[ test ]]"@iana.orginvalid
test.test@iana.orgvalid
"test.test"@iana.orgvalid
test."test"@iana.orgvalid
"test@test"@iana.orgvalid
test@123.123.123.x123valid
test@123.123.123.123invalid
test@[123.123.123.123]valid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orgvalid
test@exampleinvalid
"test\blah"@iana.orgvalid
"test\blah"@iana.orgvalid
"test\"blah"@iana.orgvalid
customer/department@iana.orgvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orgvalid
"Austin@Powers"@iana.orgvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orgvalid
"Ima Fool"@iana.orginvalid
"first"."last"@iana.orgvalid
"first".middle."last"@iana.orgvalid
"first".last@iana.orgvalid
first."last"@iana.orgvalid
"first"."middle"."last"@iana.orgvalid
"first.middle"."last"@iana.orgvalid
"first.middle.last"@iana.orgvalid
"first..last"@iana.orgvalid
"first\\\"last"@iana.orgvalid
first."mid\dle"."last"@iana.orgvalid
"test blah"@iana.orginvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.cominvalid
cal(foo\@bar)@iamcal.cominvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orginvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orginvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orginvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]valid
a@barinvalid
a-b@bar.comvalid
+@b.cvalid
+@b.comvalid
a@b.co-foo.ukvalid
"hello my name is"@stutter.cominvalid
"Test \"Fail\" Ing"@iana.orginvalid
valid@about.museumvalid
shaitan@my-domain.thisisminekthxvalid
foobar@192.168.0.1invalid
"Joe\Blow"@iana.orgvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.comvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orginvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]invalid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orginvalid
.first.last@iana.orginvalid
first.last.@iana.orginvalid
first..last@iana.orginvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orginvalid
""@iana.orgvalid
first\@last@iana.orginvalid
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.cominvalid
first.last@exampl-.cominvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
Doug\ \"Ace\"\ Lovell@iana.orginvalid
abc@def@iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orginvalid
dot.@iana.orginvalid
two..dot@iana.orginvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orginvalid
test..test@iana.orginvalid
.test@iana.orginvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]invalid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orginvalid
wo..oly@iana.orginvalid
pootietang.@iana.orginvalid
.@iana.orginvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.cominvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orgvalid
first\last@iana.orginvalid
Abc\@def@iana.orginvalid
Fred\ Bloggs@iana.orginvalid
Joe.\Blow@iana.orginvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.cominvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.cominvalid
cal(foo)bar)@iamcal.cominvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orginvalid
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.orginvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]invalid
a@bar.com.invalid
a@-b.cominvalid
a@b-.cominvalid
-@..cominvalid
-@a..cominvalid
invalid@about.museum-invalid
test@...........cominvalid
"Unicode NULL "@char.cominvalid
Unicode NULL @char.cominvalid
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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orgvalid
"first@last"@iana.orgvalid
"first\last"@iana.orgvalid
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.orginvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orgvalid
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.123invalid
first.last@cominvalid
"Abc\@def"@iana.orgvalid
"Fred\ Bloggs"@iana.orgvalid
"Joe.\Blow"@iana.orgvalid
"Abc@def"@iana.orgvalid
"Fred Bloggs"@iana.orgvalid
user+mailbox@iana.orgvalid
customer/department=shipping@iana.orgvalid
$A12345@iana.orgvalid
!def!xyz%abc@iana.orgvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orgvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orgvalid
test-test@iana.orgvalid
t*est@iana.orgvalid
+1~1+@iana.orgvalid
{_test_}@iana.orgvalid
"[[ test ]]"@iana.orgvalid
test.test@iana.orgvalid
"test.test"@iana.orgvalid
test."test"@iana.orginvalid
"test@test"@iana.orgvalid
test@123.123.123.x123invalid
test@123.123.123.123invalid
test@[123.123.123.123]valid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orgvalid
test@exampleinvalid
"test\blah"@iana.orgvalid
"test\blah"@iana.orgvalid
"test\"blah"@iana.orgvalid
customer/department@iana.orgvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orgvalid
"Austin@Powers"@iana.orgvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orgvalid
"Ima Fool"@iana.orgvalid
"first"."last"@iana.orginvalid
"first".middle."last"@iana.orginvalid
"first".last@iana.orginvalid
first."last"@iana.orginvalid
"first"."middle"."last"@iana.orginvalid
"first.middle"."last"@iana.orginvalid
"first.middle.last"@iana.orgvalid
"first..last"@iana.orgvalid
"first\\\"last"@iana.orgvalid
first."mid\dle"."last"@iana.orginvalid
"test blah"@iana.orgvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.comvalid
cal(foo\@bar)@iamcal.comvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orgvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orgvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orgvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]valid
a@barinvalid
a-b@bar.comvalid
+@b.cinvalid
+@b.comvalid
a@b.co-foo.ukvalid
"hello my name is"@stutter.comvalid
"Test \"Fail\" Ing"@iana.orgvalid
valid@about.museumvalid
shaitan@my-domain.thisisminekthxinvalid
foobar@192.168.0.1invalid
"Joe\Blow"@iana.orgvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.comvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orgvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]invalid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orginvalid
.first.last@iana.orginvalid
first.last.@iana.orginvalid
first..last@iana.orginvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orgvalid
""@iana.orginvalid
first\@last@iana.orgvalid
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.cominvalid
first.last@exampl-.cominvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orginvalid
abc\@def@iana.orgvalid
abc\@iana.orginvalid
Doug\ \"Ace\"\ Lovell@iana.orgvalid
abc@def@iana.orginvalid
abc\@def@iana.orgvalid
abc\@iana.orginvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orginvalid
dot.@iana.orginvalid
two..dot@iana.orginvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orginvalid
test..test@iana.orginvalid
.test@iana.orginvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]invalid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orginvalid
wo..oly@iana.orginvalid
pootietang.@iana.orginvalid
.@iana.orginvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.comvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orginvalid
first\last@iana.orginvalid
Abc\@def@iana.orgvalid
Fred\ Bloggs@iana.orgvalid
Joe.\Blow@iana.orginvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.comvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.comvalid
cal(foo)bar)@iamcal.comvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orgvalid
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.orgvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]invalid
a@bar.com.invalid
a@-b.cominvalid
a@b-.cominvalid
-@..cominvalid
-@a..comvalid
invalid@about.museum-invalid
test@...........cominvalid
"Unicode NULL "@char.comvalid
Unicode NULL @char.cominvalid
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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orgvalid
"first@last"@iana.orgvalid
"first\last"@iana.orgvalid
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.orgvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orgvalid
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.123valid
first.last@cominvalid
"Abc\@def"@iana.orgvalid
"Fred\ Bloggs"@iana.orgvalid
"Joe.\Blow"@iana.orgvalid
"Abc@def"@iana.orgvalid
"Fred Bloggs"@iana.orgvalid
user+mailbox@iana.orgvalid
customer/department=shipping@iana.orgvalid
$A12345@iana.orgvalid
!def!xyz%abc@iana.orgvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orgvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orgvalid
test-test@iana.orgvalid
t*est@iana.orgvalid
+1~1+@iana.orgvalid
{_test_}@iana.orgvalid
"[[ test ]]"@iana.orgvalid
test.test@iana.orgvalid
"test.test"@iana.orgvalid
test."test"@iana.orginvalid
"test@test"@iana.orgvalid
test@123.123.123.x123valid
test@123.123.123.123valid
test@[123.123.123.123]valid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orgvalid
test@exampleinvalid
"test\blah"@iana.orgvalid
"test\blah"@iana.orgvalid
"test\"blah"@iana.orgvalid
customer/department@iana.orgvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orgvalid
"Austin@Powers"@iana.orgvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orgvalid
"Ima Fool"@iana.orgvalid
"first"."last"@iana.orginvalid
"first".middle."last"@iana.orginvalid
"first".last@iana.orginvalid
first."last"@iana.orginvalid
"first"."middle"."last"@iana.orginvalid
"first.middle"."last"@iana.orginvalid
"first.middle.last"@iana.orgvalid
"first..last"@iana.orgvalid
"first\\\"last"@iana.orgvalid
first."mid\dle"."last"@iana.orginvalid
"test blah"@iana.orginvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.cominvalid
cal(foo\@bar)@iamcal.cominvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orginvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orginvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orginvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]valid
a@barinvalid
a-b@bar.comvalid
+@b.cvalid
+@b.comvalid
a@b.co-foo.ukvalid
"hello my name is"@stutter.comvalid
"Test \"Fail\" Ing"@iana.orgvalid
valid@about.museumvalid
shaitan@my-domain.thisisminekthxvalid
foobar@192.168.0.1valid
"Joe\Blow"@iana.orgvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.comvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orginvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]valid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orgvalid
.first.last@iana.orginvalid
first.last.@iana.orginvalid
first..last@iana.orginvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orginvalid
""@iana.orgvalid
first\@last@iana.orginvalid
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.cominvalid
first.last@exampl-.cominvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orgvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
Doug\ \"Ace\"\ Lovell@iana.orginvalid
abc@def@iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orginvalid
dot.@iana.orginvalid
two..dot@iana.orginvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orginvalid
test..test@iana.orginvalid
.test@iana.orginvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]valid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orginvalid
wo..oly@iana.orginvalid
pootietang.@iana.orginvalid
.@iana.orginvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.cominvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orginvalid
first\last@iana.orginvalid
Abc\@def@iana.orginvalid
Fred\ Bloggs@iana.orginvalid
Joe.\Blow@iana.orginvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.cominvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.cominvalid
cal(foo)bar)@iamcal.cominvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orginvalid
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.orginvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]valid
a@bar.com.invalid
a@-b.cominvalid
a@b-.cominvalid
-@..cominvalid
-@a..cominvalid
invalid@about.museum-invalid
test@...........cominvalid
"Unicode NULL "@char.cominvalid
Unicode NULL @char.cominvalid
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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orginvalid
"first@last"@iana.orginvalid
"first\last"@iana.orginvalid
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.orgvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orginvalid
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.123invalid
first.last@cominvalid
"Abc\@def"@iana.orginvalid
"Fred\ Bloggs"@iana.orginvalid
"Joe.\Blow"@iana.orginvalid
"Abc@def"@iana.orginvalid
"Fred Bloggs"@iana.orginvalid
user+mailbox@iana.orgvalid
customer/department=shipping@iana.orgvalid
$A12345@iana.orgvalid
!def!xyz%abc@iana.orgvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orginvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orgvalid
test-test@iana.orgvalid
t*est@iana.orgvalid
+1~1+@iana.orgvalid
{_test_}@iana.orgvalid
"[[ test ]]"@iana.orginvalid
test.test@iana.orgvalid
"test.test"@iana.orginvalid
test."test"@iana.orginvalid
"test@test"@iana.orginvalid
test@123.123.123.x123invalid
test@123.123.123.123valid
test@[123.123.123.123]invalid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orginvalid
test@exampleinvalid
"test\blah"@iana.orginvalid
"test\blah"@iana.orginvalid
"test\"blah"@iana.orginvalid
customer/department@iana.orgvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orgvalid
"Austin@Powers"@iana.orginvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orginvalid
"Ima Fool"@iana.orginvalid
"first"."last"@iana.orginvalid
"first".middle."last"@iana.orginvalid
"first".last@iana.orginvalid
first."last"@iana.orginvalid
"first"."middle"."last"@iana.orginvalid
"first.middle"."last"@iana.orginvalid
"first.middle.last"@iana.orginvalid
"first..last"@iana.orginvalid
"first\\\"last"@iana.orginvalid
first."mid\dle"."last"@iana.orginvalid
"test blah"@iana.orginvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.cominvalid
cal(foo\@bar)@iamcal.cominvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orginvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orginvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orginvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]invalid
a@barinvalid
a-b@bar.comvalid
+@b.cinvalid
+@b.comvalid
a@b.co-foo.ukvalid
"hello my name is"@stutter.cominvalid
"Test \"Fail\" Ing"@iana.orginvalid
valid@about.museumvalid
shaitan@my-domain.thisisminekthxinvalid
foobar@192.168.0.1valid
"Joe\Blow"@iana.orginvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.comvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orginvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]valid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orgvalid
.first.last@iana.orginvalid
first.last.@iana.orginvalid
first..last@iana.orginvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orginvalid
""@iana.orginvalid
first\@last@iana.orginvalid
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.cominvalid
first.last@exampl-.cominvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orgvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
Doug\ \"Ace\"\ Lovell@iana.orginvalid
abc@def@iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orginvalid
dot.@iana.orginvalid
two..dot@iana.orginvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orginvalid
test..test@iana.orginvalid
.test@iana.orginvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]invalid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orginvalid
wo..oly@iana.orginvalid
pootietang.@iana.orginvalid
.@iana.orginvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.cominvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orginvalid
first\last@iana.orginvalid
Abc\@def@iana.orginvalid
Fred\ Bloggs@iana.orginvalid
Joe.\Blow@iana.orginvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.cominvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.cominvalid
cal(foo)bar)@iamcal.cominvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orginvalid
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.orginvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]invalid
a@bar.com.invalid
a@-b.cominvalid
a@b-.cominvalid
-@..cominvalid
-@a..cominvalid
invalid@about.museum-invalid
test@...........cominvalid
"Unicode NULL "@char.cominvalid
Unicode NULL @char.cominvalid
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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orginvalid
"first@last"@iana.orginvalid
"first\last"@iana.orginvalid
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.orgvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orginvalid
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.123invalid
first.last@cominvalid
"Abc\@def"@iana.orginvalid
"Fred\ Bloggs"@iana.orginvalid
"Joe.\Blow"@iana.orginvalid
"Abc@def"@iana.orginvalid
"Fred Bloggs"@iana.orginvalid
user+mailbox@iana.orgvalid
customer/department=shipping@iana.orginvalid
$A12345@iana.orgvalid
!def!xyz%abc@iana.orgvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orginvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orgvalid
test-test@iana.orgvalid
t*est@iana.orgvalid
+1~1+@iana.orgvalid
{_test_}@iana.orgvalid
"[[ test ]]"@iana.orginvalid
test.test@iana.orgvalid
"test.test"@iana.orginvalid
test."test"@iana.orginvalid
"test@test"@iana.orginvalid
test@123.123.123.x123invalid
test@123.123.123.123valid
test@[123.123.123.123]invalid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orginvalid
test@exampleinvalid
"test\blah"@iana.orginvalid
"test\blah"@iana.orginvalid
"test\"blah"@iana.orginvalid
customer/department@iana.orginvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orgvalid
"Austin@Powers"@iana.orginvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orginvalid
"Ima Fool"@iana.orginvalid
"first"."last"@iana.orginvalid
"first".middle."last"@iana.orginvalid
"first".last@iana.orginvalid
first."last"@iana.orginvalid
"first"."middle"."last"@iana.orginvalid
"first.middle"."last"@iana.orginvalid
"first.middle.last"@iana.orginvalid
"first..last"@iana.orginvalid
"first\\\"last"@iana.orginvalid
first."mid\dle"."last"@iana.orginvalid
"test blah"@iana.orginvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.cominvalid
cal(foo\@bar)@iamcal.cominvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orginvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orginvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orginvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]invalid
a@barinvalid
a-b@bar.comvalid
+@b.cinvalid
+@b.comvalid
a@b.co-foo.ukvalid
"hello my name is"@stutter.cominvalid
"Test \"Fail\" Ing"@iana.orginvalid
valid@about.museumvalid
shaitan@my-domain.thisisminekthxinvalid
foobar@192.168.0.1valid
"Joe\Blow"@iana.orginvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.cominvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orginvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]valid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orgvalid
.first.last@iana.orginvalid
first.last.@iana.orginvalid
first..last@iana.orginvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orginvalid
""@iana.orginvalid
first\@last@iana.orginvalid
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.cominvalid
first.last@exampl-.cominvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orgvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
Doug\ \"Ace\"\ Lovell@iana.orginvalid
abc@def@iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orginvalid
dot.@iana.orginvalid
two..dot@iana.orginvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orginvalid
test..test@iana.orginvalid
.test@iana.orginvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]valid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orginvalid
wo..oly@iana.orginvalid
pootietang.@iana.orginvalid
.@iana.orginvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.cominvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orginvalid
first\last@iana.orginvalid
Abc\@def@iana.orginvalid
Fred\ Bloggs@iana.orginvalid
Joe.\Blow@iana.orginvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.cominvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.cominvalid
cal(foo)bar)@iamcal.cominvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orginvalid
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.orginvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]invalid
a@bar.com.invalid
a@-b.cominvalid
a@b-.cominvalid
-@..cominvalid
-@a..cominvalid
invalid@about.museum-invalid
test@...........cominvalid
"Unicode NULL "@char.cominvalid
Unicode NULL @char.cominvalid
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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orginvalid
"first@last"@iana.orginvalid
"first\last"@iana.orginvalid
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.orgvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orginvalid
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.123invalid
first.last@cominvalid
"Abc\@def"@iana.orginvalid
"Fred\ Bloggs"@iana.orginvalid
"Joe.\Blow"@iana.orginvalid
"Abc@def"@iana.orginvalid
"Fred Bloggs"@iana.orginvalid
user+mailbox@iana.orgvalid
customer/department=shipping@iana.orginvalid
$A12345@iana.orgvalid
!def!xyz%abc@iana.orgvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orginvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orgvalid
test-test@iana.orgvalid
t*est@iana.orgvalid
+1~1+@iana.orgvalid
{_test_}@iana.orgvalid
"[[ test ]]"@iana.orginvalid
test.test@iana.orgvalid
"test.test"@iana.orginvalid
test."test"@iana.orginvalid
"test@test"@iana.orginvalid
test@123.123.123.x123invalid
test@123.123.123.123valid
test@[123.123.123.123]invalid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orginvalid
test@exampleinvalid
"test\blah"@iana.orginvalid
"test\blah"@iana.orginvalid
"test\"blah"@iana.orginvalid
customer/department@iana.orginvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orgvalid
"Austin@Powers"@iana.orginvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orginvalid
"Ima Fool"@iana.orginvalid
"first"."last"@iana.orginvalid
"first".middle."last"@iana.orginvalid
"first".last@iana.orginvalid
first."last"@iana.orginvalid
"first"."middle"."last"@iana.orginvalid
"first.middle"."last"@iana.orginvalid
"first.middle.last"@iana.orginvalid
"first..last"@iana.orginvalid
"first\\\"last"@iana.orginvalid
first."mid\dle"."last"@iana.orginvalid
"test blah"@iana.orginvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.cominvalid
cal(foo\@bar)@iamcal.cominvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orginvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orginvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orginvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]invalid
a@barinvalid
a-b@bar.comvalid
+@b.cinvalid
+@b.comvalid
a@b.co-foo.ukvalid
"hello my name is"@stutter.cominvalid
"Test \"Fail\" Ing"@iana.orginvalid
valid@about.museumvalid
shaitan@my-domain.thisisminekthxvalid
foobar@192.168.0.1valid
"Joe\Blow"@iana.orginvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.cominvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orginvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]valid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orgvalid
.first.last@iana.orginvalid
first.last.@iana.orginvalid
first..last@iana.orginvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orginvalid
""@iana.orginvalid
first\@last@iana.orginvalid
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.cominvalid
first.last@exampl-.comvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orgvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
Doug\ \"Ace\"\ Lovell@iana.orginvalid
abc@def@iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orginvalid
dot.@iana.orginvalid
two..dot@iana.orginvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orginvalid
test..test@iana.orginvalid
.test@iana.orginvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]valid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orginvalid
wo..oly@iana.orginvalid
pootietang.@iana.orginvalid
.@iana.orginvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.cominvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orginvalid
first\last@iana.orginvalid
Abc\@def@iana.orginvalid
Fred\ Bloggs@iana.orginvalid
Joe.\Blow@iana.orginvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.cominvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.cominvalid
cal(foo)bar)@iamcal.cominvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orginvalid
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.orginvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]invalid
a@bar.com.invalid
a@-b.cominvalid
a@b-.comvalid
-@..cominvalid
-@a..cominvalid
invalid@about.museum-invalid
test@...........cominvalid
"Unicode NULL "@char.cominvalid
Unicode NULL @char.cominvalid
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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orginvalid
"first@last"@iana.orginvalid
"first\last"@iana.orginvalid
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.orgvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orginvalid
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.123valid
first.last@cominvalid
"Abc\@def"@iana.orginvalid
"Fred\ Bloggs"@iana.orginvalid
"Joe.\Blow"@iana.orginvalid
"Abc@def"@iana.orginvalid
"Fred Bloggs"@iana.orginvalid
user+mailbox@iana.orginvalid
customer/department=shipping@iana.orginvalid
$A12345@iana.orginvalid
!def!xyz%abc@iana.orginvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orginvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orginvalid
test-test@iana.orgvalid
t*est@iana.orginvalid
+1~1+@iana.orginvalid
{_test_}@iana.orginvalid
"[[ test ]]"@iana.orginvalid
test.test@iana.orgvalid
"test.test"@iana.orginvalid
test."test"@iana.orginvalid
"test@test"@iana.orginvalid
test@123.123.123.x123valid
test@123.123.123.123valid
test@[123.123.123.123]invalid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orginvalid
test@exampleinvalid
"test\blah"@iana.orginvalid
"test\blah"@iana.orginvalid
"test\"blah"@iana.orginvalid
customer/department@iana.orginvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orginvalid
"Austin@Powers"@iana.orginvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orginvalid
"Ima Fool"@iana.orginvalid
"first"."last"@iana.orginvalid
"first".middle."last"@iana.orginvalid
"first".last@iana.orginvalid
first."last"@iana.orginvalid
"first"."middle"."last"@iana.orginvalid
"first.middle"."last"@iana.orginvalid
"first.middle.last"@iana.orginvalid
"first..last"@iana.orginvalid
"first\\\"last"@iana.orginvalid
first."mid\dle"."last"@iana.orginvalid
"test blah"@iana.orginvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.cominvalid
cal(foo\@bar)@iamcal.cominvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orginvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orginvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orginvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]invalid
a@barinvalid
a-b@bar.comvalid
+@b.cinvalid
+@b.cominvalid
a@b.co-foo.ukvalid
"hello my name is"@stutter.cominvalid
"Test \"Fail\" Ing"@iana.orginvalid
valid@about.museumvalid
shaitan@my-domain.thisisminekthxvalid
foobar@192.168.0.1invalid
"Joe\Blow"@iana.orginvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduinvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.cominvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orginvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]valid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orgvalid
.first.last@iana.orgvalid
first.last.@iana.orgvalid
first..last@iana.orgvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orginvalid
""@iana.orginvalid
first\@last@iana.orginvalid
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.comvalid
first.last@exampl-.comvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orgvalid
abc\@def@iana.orginvalid
abc\@iana.orgvalid
Doug\ \"Ace\"\ Lovell@iana.orginvalid
abc@def@iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orgvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orgvalid
dot.@iana.orgvalid
two..dot@iana.orgvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orgvalid
test..test@iana.orgvalid
.test@iana.orgvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]valid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orgvalid
wo..oly@iana.orgvalid
pootietang.@iana.orgvalid
.@iana.orgvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.cominvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orginvalid
first\last@iana.orgvalid
Abc\@def@iana.orginvalid
Fred\ Bloggs@iana.orginvalid
Joe.\Blow@iana.orgvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.cominvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.cominvalid
cal(foo)bar)@iamcal.cominvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orginvalid
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.orginvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]invalid
a@bar.com.invalid
a@-b.comvalid
a@b-.comvalid
-@..cominvalid
-@a..cominvalid
invalid@about.museum-invalid
test@...........cominvalid
"Unicode NULL "@char.cominvalid
Unicode NULL @char.cominvalid
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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orginvalid
"first@last"@iana.orginvalid
"first\last"@iana.orginvalid
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.orgvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orginvalid
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.123invalid
first.last@cominvalid
"Abc\@def"@iana.orginvalid
"Fred\ Bloggs"@iana.orginvalid
"Joe.\Blow"@iana.orginvalid
"Abc@def"@iana.orginvalid
"Fred Bloggs"@iana.orginvalid
user+mailbox@iana.orginvalid
customer/department=shipping@iana.orginvalid
$A12345@iana.orginvalid
!def!xyz%abc@iana.orginvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orginvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orginvalid
test-test@iana.orgvalid
t*est@iana.orginvalid
+1~1+@iana.orginvalid
{_test_}@iana.orginvalid
"[[ test ]]"@iana.orginvalid
test.test@iana.orgvalid
"test.test"@iana.orginvalid
test."test"@iana.orginvalid
"test@test"@iana.orginvalid
test@123.123.123.x123invalid
test@123.123.123.123invalid
test@[123.123.123.123]invalid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orginvalid
test@exampleinvalid
"test\blah"@iana.orginvalid
"test\blah"@iana.orginvalid
"test\"blah"@iana.orginvalid
customer/department@iana.orginvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orginvalid
"Austin@Powers"@iana.orginvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orginvalid
"Ima Fool"@iana.orginvalid
"first"."last"@iana.orginvalid
"first".middle."last"@iana.orginvalid
"first".last@iana.orginvalid
first."last"@iana.orginvalid
"first"."middle"."last"@iana.orginvalid
"first.middle"."last"@iana.orginvalid
"first.middle.last"@iana.orginvalid
"first..last"@iana.orginvalid
"first\\\"last"@iana.orginvalid
first."mid\dle"."last"@iana.orginvalid
"test blah"@iana.orginvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.cominvalid
cal(foo\@bar)@iamcal.cominvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orginvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orginvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orginvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]invalid
a@barinvalid
a-b@bar.comvalid
+@b.cinvalid
+@b.cominvalid
a@b.co-foo.ukinvalid
"hello my name is"@stutter.cominvalid
"Test \"Fail\" Ing"@iana.orginvalid
valid@about.museumvalid
shaitan@my-domain.thisisminekthxvalid
foobar@192.168.0.1invalid
"Joe\Blow"@iana.orginvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduinvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.cominvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orginvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]valid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orgvalid
.first.last@iana.orgvalid
first.last.@iana.orgvalid
first..last@iana.orgvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orginvalid
""@iana.orginvalid
first\@last@iana.orginvalid
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.cominvalid
first.last@exampl-.cominvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orgvalid
abc\@def@iana.orginvalid
abc\@iana.orgvalid
Doug\ \"Ace\"\ Lovell@iana.orginvalid
abc@def@iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orgvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orgvalid
dot.@iana.orgvalid
two..dot@iana.orgvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orgvalid
test..test@iana.orgvalid
.test@iana.orgvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]valid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orgvalid
wo..oly@iana.orgvalid
pootietang.@iana.orgvalid
.@iana.orgvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.cominvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orginvalid
first\last@iana.orgvalid
Abc\@def@iana.orginvalid
Fred\ Bloggs@iana.orginvalid
Joe.\Blow@iana.orgvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.cominvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.cominvalid
cal(foo)bar)@iamcal.cominvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orginvalid
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.orginvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]invalid
a@bar.com.invalid
a@-b.cominvalid
a@b-.cominvalid
-@..cominvalid
-@a..cominvalid
invalid@about.museum-invalid
test@...........cominvalid
"Unicode NULL "@char.cominvalid
Unicode NULL @char.cominvalid
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.orgvalid
1234567890123456789012345678901234567890123456789012345678901234@iana.orgvalid
"first\"last"@iana.orginvalid
"first@last"@iana.orginvalid
"first\last"@iana.orginvalid
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.orgvalid
first.last@3com.comvalid
first.last@123.iana.orgvalid
"first\last"@iana.orginvalid
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.123invalid
first.last@cominvalid
"Abc\@def"@iana.orginvalid
"Fred\ Bloggs"@iana.orginvalid
"Joe.\Blow"@iana.orginvalid
"Abc@def"@iana.orginvalid
"Fred Bloggs"@iana.orginvalid
user+mailbox@iana.orginvalid
customer/department=shipping@iana.orginvalid
$A12345@iana.orginvalid
!def!xyz%abc@iana.orginvalid
_somename@iana.orgvalid
dclo@us.ibm.comvalid
peter.piper@iana.orgvalid
"Doug \"Ace\" L."@iana.orginvalid
test@iana.orgvalid
TEST@iana.orgvalid
1234567890@iana.orgvalid
test+test@iana.orginvalid
test-test@iana.orgvalid
t*est@iana.orginvalid
+1~1+@iana.orginvalid
{_test_}@iana.orginvalid
"[[ test ]]"@iana.orginvalid
test.test@iana.orgvalid
"test.test"@iana.orginvalid
test."test"@iana.orginvalid
"test@test"@iana.orginvalid
test@123.123.123.x123invalid
test@123.123.123.123invalid
test@[123.123.123.123]invalid
test@example.iana.orgvalid
test@example.example.iana.orgvalid
"test\test"@iana.orginvalid
test@exampleinvalid
"test\blah"@iana.orginvalid
"test\blah"@iana.orginvalid
"test\"blah"@iana.orginvalid
customer/department@iana.orginvalid
_Yosemite.Sam@iana.orgvalid
~@iana.orginvalid
"Austin@Powers"@iana.orginvalid
Ima.Fool@iana.orgvalid
"Ima.Fool"@iana.orginvalid
"Ima Fool"@iana.orginvalid
"first"."last"@iana.orginvalid
"first".middle."last"@iana.orginvalid
"first".last@iana.orginvalid
first."last"@iana.orginvalid
"first"."middle"."last"@iana.orginvalid
"first.middle"."last"@iana.orginvalid
"first.middle.last"@iana.orginvalid
"first..last"@iana.orginvalid
"first\\\"last"@iana.orginvalid
first."mid\dle"."last"@iana.orginvalid
"test blah"@iana.orginvalid
(foo)cal(bar)@(baz)iamcal.com(quux)invalid
cal@iamcal(woo).(yay)cominvalid
cal(woo(yay)hoopla)@iamcal.cominvalid
cal(foo\@bar)@iamcal.cominvalid
cal(foo\)bar)@iamcal.cominvalid
first().last@iana.orginvalid
pete(his account)@silly.test(his host)invalid
c@(Chris's host.)public.exampleinvalid
jdoe@machine(comment). exampleinvalid
1234 @ local(blah) .machine .exampleinvalid
first(abc.def).last@iana.orginvalid
first(a"bc.def).last@iana.orginvalid
first.(")middle.last(")@iana.orginvalid
first(abc\(def)@iana.orginvalid
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).cominvalid
a(a(b(c)d(e(f))g)h(i)j)@iana.orginvalid
name.lastname@domain.comvalid
a@binvalid
a@bar.comvalid
aaa@[123.123.123.123]invalid
a@barinvalid
a-b@bar.comvalid
+@b.cinvalid
+@b.cominvalid
a@b.co-foo.ukvalid
"hello my name is"@stutter.cominvalid
"Test \"Fail\" Ing"@iana.orginvalid
valid@about.museuminvalid
shaitan@my-domain.thisisminekthxinvalid
foobar@192.168.0.1invalid
"Joe\Blow"@iana.orginvalid
HM2Kinsists@(that comments are allowed)this.is.okinvalid
user%uucp!path@berkeley.eduinvalid
first.last @iana.orginvalid
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.cominvalid
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.comvalid
test@xn--example.comvalid
test@example.comvalid
 
These should be invalid
first.last@sub.do,cominvalid
first\@last@iana.orginvalid
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234 [...]valid
first.lastinvalid
12345678901234567890123456789012345678901234567890123456789012345@iana.orgvalid
.first.last@iana.orgvalid
first.last.@iana.orgvalid
first..last@iana.orgvalid
"first"last"@iana.orginvalid
"""@iana.orginvalid
"\"@iana.orginvalid
""@iana.orginvalid
first\@last@iana.orginvalid
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.comvalid
first.last@exampl-.comvalid
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.orgvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
Doug\ \"Ace\"\ Lovell@iana.orginvalid
abc@def@iana.orginvalid
abc\@def@iana.orginvalid
abc\@iana.orginvalid
@iana.orginvalid
doug@invalid
"qu@iana.orginvalid
ote"@iana.orginvalid
.dot@iana.orgvalid
dot.@iana.orgvalid
two..dot@iana.orgvalid
"Doug "Ace" L."@iana.orginvalid
Doug\ \"Ace\"\ L\.@iana.orginvalid
hello world@iana.orginvalid
gatsby@f.sc.ot.t.f.i.tzg.era.l.d.invalid
test.iana.orginvalid
test.@iana.orgvalid
test..test@iana.orgvalid
.test@iana.orgvalid
test@test@iana.orginvalid
test@@iana.orginvalid
-- test --@iana.orginvalid
[test]@iana.orginvalid
"test"test"@iana.orginvalid
()[]\;:,><@iana.orginvalid
test@.invalid
test@example.invalid
test@.orginvalid
test@1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 [...]valid
test@[123.123.123.123invalid
test@123.123.123.123]invalid
NotAnEmailinvalid
@NotAnEmailinvalid
"test"blah"@iana.orginvalid
.wooly@iana.orgvalid
wo..oly@iana.orgvalid
pootietang.@iana.orgvalid
.@iana.orgvalid
Ima Fool@iana.orginvalid
phil.h\@\@ck@haacked.cominvalid
foo@[\1.2.3.4]invalid
first."".last@iana.orginvalid
first\last@iana.orginvalid
Abc\@def@iana.orginvalid
Fred\ Bloggs@iana.orginvalid
Joe.\Blow@iana.orginvalid
first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89]invalid
{^c\@**Dog^}@cartoon.cominvalid
"foo"(yay)@(hoopla)[1.2.3.4]invalid
cal(foo(bar)@iamcal.cominvalid
cal(foo)bar)@iamcal.cominvalid
cal(foo\)@iamcal.cominvalid
first(12345678901234567890123456789012345678901234567890)last@(123456789012345678901234567890123456789012 [...]invalid
first(middle)last@iana.orginvalid
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.orginvalid
.@invalid
@bar.cominvalid
@@bar.cominvalid
aaa.cominvalid
aaa@.cominvalid
aaa@.123invalid
aaa@[123.123.123.123]ainvalid
aaa@[123.123.123.333]invalid
a@bar.com.invalid
a@-b.comvalid
a@b-.comvalid
-@..comvalid
-@a..comvalid
invalid@about.museum-invalid
test@...........comvalid
"Unicode NULL "@char.cominvalid
Unicode NULL @char.cominvalid
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

转载于:https://www.cnblogs.com/hyqing/p/3421730.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值