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. Masonry+Infinite-Scroll实现无刷新无分页完美瀑布流(转)

    一.Masonry 是基于Jquery插件,用于对CSS布局的可移动层进行重新布局.Masonry愿意石工,可以这样形象的理解,页面上很多大小不一的移动层可以想象成散乱的石头,经过Masonry这个石 ...

  2. MySQL锁系列3 MDL锁

    http://www.cnblogs.com/xpchild/p/3790139.html   MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构 ...

  3. 微信朋友圈分享页面(JS-SDK 1.0)

    微信更新sdk后大量分享朋友圈代码失效,标题 缩略图 描述无法自定义 新版SDK分享文章步骤 1.绑定域名 (方法参考 http://mp.weixin.qq.com/wiki/7/aaa137b55 ...

  4. spring源码分析之spring-jms模块详解

    0 概述 spring提供了一个jms集成框架,这个框架如spring 集成jdbc api一样,简化了jms api的使用. jms可以简单的分成两个功能区,消息的生产和消息的消费.JmsTempl ...

  5. 使用C#通过Thrift访问HBase

    前言 因为项目需要要为客户程序提供C#.Net的HBase访问接口,而HBase并没有提供原生的.Net客户端接口,可以通过启动HBase的Thrift服务来提供多语言支持. Thrift介绍 环境 ...

  6. Linux中的crontab命令用法

    Crontab 在linux中,crontab的用来设置定期执行指定的命令,我们可以用它来指定一些需要重复的事情,Linux系统的用户只需将想要定期要执行的命令序列加到crontab文件中,操作系统即 ...

  7. [改善Java代码]自由选择字符串拼接方法

    对一个字符串拼接有三种方法:加号,contact方法,StringBuffer或者StringBuilder的append方法,其中加号是最常用的.其他两种方式偶尔会出现在一些开源项目中,那么这三者有 ...

  8. Java线程池--ThreadPoolExecutor

    一.线程池的处理流程 向线程池提交一个任务后,它的主要处理流程如下图所示: 一个线程从被提交(submit)到执行共经历以下流程: 线程池判断核心线程池里的线程是否都在执行任务,如果不是,则创建一个新 ...

  9. 本机连接虚拟机Oracle时报错的解决办法

    虚拟机安装了Oracle服务器(桌面类)和客户端,里面使用plsql连接自己没有问题. 在本机连接虚拟机没有成功.虚拟机的地址是192.168.126.132,已经确认本机能ping通虚拟机. 先是报 ...

  10. centos6.5下逻辑卷操作

    1.将两块独立磁盘分别分区 2.创建物理卷-pvcreate 3.创建卷组 4.创建逻辑卷 5.格式化逻辑卷 6.扩展逻辑卷 7.缩小逻辑卷