Comparing E-mail Address Validating Regular Expressions

Updated: 2/3/2012

Summary

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

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

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

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


Introduction

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

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

Notes

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

Detailed Results

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

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

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

Valid: 96/134
Invalid: 130/132

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

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

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

Valid: 72/134
Invalid: 116/132

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

Peter Bowen
Uses preg_match()

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

Valid: 92/134
Invalid: 120/132

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

James Watts and Francisco Jose Martin Moreno
Uses preg_match()

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

Valid: 41/134
Invalid: 129/132

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

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

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

Valid: 38/134
Invalid: 128/132

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

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

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

Valid: 39/134
Invalid: 126/132

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

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

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

Valid: 31/134
Invalid: 106/132

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

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

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

Valid: 26/134
Invalid: 111/132

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

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

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

Valid: 25/134
Invalid: 108/132

转载:邮箱正则表达式Comparing E-mail Address Validating Regular Expressions的更多相关文章

  1. 正则表达式(Regular expressions)使用笔记

    Regular expressions are a powerful language for matching text patterns. This page gives a basic intr ...

  2. Python之Regular Expressions(正则表达式)

    在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windows/Dos下用 ...

  3. 自学Zabbix8.1 Regular expressions 正则表达式

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix8.1 Regular expressions 正则表达式 1. 配置 点击Adm ...

  4. 正则表达式备忘录-Regular Expressions Cheatsheet中文版

    正则表达式备忘录Regular Expressions Cheatsheet中文版原文:https://www.maketecheasier.com/cheatsheet/regex/ 测试文件a.t ...

  5. Jmeter 正则表达式提取器详解(Regular Expression Exactor)

    Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...

  6. QQ邮箱发送邮件,出现mail from address must be same as authorization user错误

    之前做的一个系统,有个发送邮件的功能,一直能正常使用,今天同事说QQ邮箱发送不了. 立马着手调试,发现服务器一直出现“mail from address must be same as authori ...

  7. CentOS 7 使用外部邮箱 发送邮件和附件—mail,mailx

    1.查看软件包是否安装 [root@localhost ~]# rpm -qa|grep mail mailx-12.5-12.el7_0.x86_64 javamail-1.4.6-8.el7.no ...

  8. 转载 Python 正则表达式入门(初级篇)

    Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写.转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式 ...

  9. [转载]java正则表达式

    转载自:http://butter.iteye.com/blog/1189600 1.正则表达式的知识要点1.正则表达式是什么?正则表达式是一种可以用于模式匹配和替换的强有力的工具.2.正则表达式的优 ...

随机推荐

  1. 统计0到n之间1的个数

    问题描写叙述 给定一个十进制整数N,求出从1到N的全部整数中出现"1"的个数. 比如:N=2时 1,2出现了1个 "1" . N=12时 1,2,3,4,5,6 ...

  2. 配置Log4j(非常具体)

    来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记 ...

  3. cocos2dx jsoncpp

    jsoncpp下载 http://sourceforge.net/projects/jsoncpp/ 下载解压后用到的是include\json下面的头文件跟src\lib_json下的文件. 导入头 ...

  4. NopCommerce Html扩展方法Html.Widget

    在Nop中有一个Html扩展的类叫HtmlExtensions,主要源码: public static class HtmlExtensions { #region Admin area extens ...

  5. debian7编译内核

    第一个步骤“配置内核”. 在这里,我比较建议在发行版默认的config的基础上再进行配置,这样 配置出的内核和发行版本身才会有更好的相容性.比如可以在运行“make menuconfig”之前执行命令 ...

  6. php与ajax交互中文乱码(字符串转化)

    一.从后台传过来的json不做处理,前端result.name这样调用回乱码.应该使用urldecode将jsonencod转码 注意json只接受utf-8编码的字符,所以json_encode() ...

  7. 一种快速求fibonacci第n个数的算法

    利用动态规则的思路,摒弃传统的递归做法,可以得到一种快速的求fibonacci第n个数的算法: ''' 求第n(从1开始)位fibonacci数 fibonacci数列前两位为0, 1. 后面每一位数 ...

  8. android 几个小技巧

    1.如果打开模拟器,不同程序打开了不同的模拟器.可能是某个某个模拟器的target版本过低,修改一下4.2,应该都可以用了 2.找不到R.id.的错误,不妨删除menu文件夹下的xml文件 3.act ...

  9. Linux 学习笔记 cp 和 ln

    最近在重温大学的经典课程:Linux.每天工作之余的时间,坐在家里的阳台上,简简单单的纪录一些基本的知识点,对我来说,既温暖又难得. 有朋友问我关于cp和ln建立符号链接(软链接)和硬链接的一些问题, ...

  10. python解决SNIMissingWarning和InsecurePlatformWarning警告

    在想要获取https站点的资源时,会报出SNIMissingWarning和InsecurePlatformWarning警告 SNIMissingWarning: An HTTPS request  ...