Created
June 10, 2022 22:03
-
-
Save MetroWind/73d165f6112ea773ceecc9a146f9597e to your computer and use it in GitHub Desktop.
Email validation test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
first.last@iana.org | |
Valid | |
1234567890123456789012345678901234567890123456789012345678901234@iana.org | |
Valid | |
first.last@sub.do,com | |
Invalid | |
"first\"last"@iana.org | |
Valid | |
first\@last@iana.org | |
Invalid | |
"first@last"@iana.org | |
Valid | |
"first\\last"@iana.org | |
Valid | |
x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x2 | |
Valid | |
1234567890123456789012345678901234567890123456789012345678@12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.123456789012345678901234567890123456789012345678901234567890123.iana.org | |
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 | |
123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.12345.iana.org | |
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 | |
"first\last"@iana.org | |
Valid | |
"""@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.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456 | |
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] | |
Valid | |
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:3333::4444:5555:6666:7777] | |
Valid | |
first.last@[IPv6:1111:2222:333x::4444:5555] | |
Invalid | |
first.last@[IPv6:1111:2222:33333::4444:5555] | |
Invalid | |
first.last@example.123 | |
Valid | |
first.last@com | |
Valid | |
first.last@-xample.com | |
Invalid | |
first.last@exampl-.com | |
Invalid | |
first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org | |
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 | |
abc\@def@iana.org | |
Invalid | |
abc\\@iana.org | |
Invalid | |
peter.piper@iana.org | |
Valid | |
Doug\ \"Ace\"\ Lovell@iana.org | |
Invalid | |
"Doug \"Ace\" L."@iana.org | |
Valid | |
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 | |
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 | |
Valid | |
"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.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 | |
Valid | |
"test"test"@iana.org | |
Invalid | |
()[]\;:,><@iana.org | |
Invalid | |
test@. | |
Invalid | |
test@example. | |
Invalid | |
test@.org | |
Invalid | |
test@123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012.com | |
Invalid | |
test@example | |
Valid | |
test@[123.123.123.123 | |
Invalid | |
test@123.123.123.123] | |
Invalid | |
NotAnEmail | |
Invalid | |
@NotAnEmail | |
Invalid | |
"test\\blah"@iana.org | |
Valid | |
"test\blah"@iana.org | |
Valid | |
"test\ blah"@iana.org | |
Valid | |
"test blah"@iana.org | |
Invalid | |
"test\"blah"@iana.org | |
Valid | |
"test"blah"@iana.org | |
Invalid | |
customer/department@iana.org | |
Valid | |
_Yosemite.Sam@iana.org | |
Valid | |
~@iana.org | |
Valid | |
.wooly@iana.org | |
Invalid | |
wo..oly@iana.org | |
Invalid | |
pootietang.@iana.org | |
Invalid | |
.@iana.org | |
Invalid | |
"Austin@Powers"@iana.org | |
Valid | |
Ima.Fool@iana.org | |
Valid | |
"Ima.Fool"@iana.org | |
Valid | |
"Ima Fool"@iana.org | |
Valid | |
Ima Fool@iana.org | |
Invalid | |
phil.h\@\@ck@haacked.com | |
Invalid | |
"first"."last"@iana.org | |
Valid | |
"first".middle."last"@iana.org | |
Valid | |
"first\\"last"@iana.org | |
Invalid | |
"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 | |
foo@[\1.2.3.4] | |
Invalid | |
"first\\\"last"@iana.org | |
Valid | |
first."mid\dle"."last"@iana.org | |
Valid | |
Test. Folding. Whitespace@iana.org | |
Valid | |
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 | |
"test\ blah"@iana.org | |
Invalid | |
"test blah"@iana.org | |
Valid | |
{^c\@**Dog^}@cartoon.com | |
Invalid | |
(foo)cal(bar)@(baz)iamcal.com(quux) | |
Valid | |
cal@iamcal(woo).(yay)com | |
Valid | |
"foo"(yay)@(hoopla)[1.2.3.4] | |
Invalid | |
cal(woo(yay)hoopla)@iamcal.com | |
Valid | |
cal(foo\@bar)@iamcal.com | |
Valid | |
cal(foo\)bar)@iamcal.com | |
Valid | |
cal(foo(bar)@iamcal.com | |
Invalid | |
cal(foo)bar)@iamcal.com | |
Invalid | |
cal(foo\)@iamcal.com | |
Invalid | |
first().last@iana.org | |
Valid | |
first.( middle )last@iana.org | |
Valid | |
first(12345678901234567890123456789012345678901234567890)last@(1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890)iana.org | |
Invalid | |
first(Welcome to the ("wonderful" (!)) world of email)@iana.org | |
Valid | |
pete(his account)@silly.test(his host) | |
Valid | |
c@(Chris's host.)public.example | |
Valid | |
jdoe@machine(comment). example | |
Valid | |
1234 @ local(blah) .machine .example | |
Valid | |
first(middle)last@iana.org | |
Invalid | |
first(abc.def).last@iana.org | |
Valid | |
first(a"bc.def).last@iana.org | |
Valid | |
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).(abc("def".ghi).mno)com(abc("def".ghi).mno) | |
Invalid | |
first(abc\(def)@iana.org | |
Valid | |
first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com | |
Valid | |
a(a(b(c)d(e(f))g)h(i)j)@iana.org | |
Valid | |
a(a(b(c)d(e(f))g)(h(i)j)@iana.org | |
Invalid | |
name.lastname@domain.com | |
Valid | |
.@ | |
Invalid | |
a@b | |
Valid | |
@bar.com | |
Invalid | |
@@bar.com | |
Invalid | |
a@bar.com | |
Valid | |
aaa.com | |
Invalid | |
aaa@.com | |
Invalid | |
aaa@.123 | |
Invalid | |
aaa@[123.123.123.123] | |
Valid | |
aaa@[123.123.123.123]a | |
Invalid | |
aaa@[123.123.123.333] | |
Invalid | |
a@bar.com. | |
Invalid | |
a@bar | |
Valid | |
a-b@bar.com | |
Valid | |
+@b.c | |
Valid | |
+@b.com | |
Valid | |
a@-b.com | |
Invalid | |
a@b-.com | |
Invalid | |
-@..com | |
Invalid | |
-@a..com | |
Invalid | |
a@b.co-foo.uk | |
Valid | |
"hello my name is"@stutter.com | |
Valid | |
"Test \"Fail\" Ing"@iana.org | |
Valid | |
valid@about.museum | |
Valid | |
invalid@about.museum- | |
Invalid | |
shaitan@my-domain.thisisminekthx | |
Valid | |
test@...........com | |
Invalid | |
foobar@192.168.0.1 | |
Valid | |
"Joe\\Blow"@iana.org | |
Valid | |
Invalid \ Folding \ Whitespace@iana.org | |
Invalid | |
HM2Kinsists@(that comments are allowed)this.is.ok | |
Valid | |
user%uucp!path@berkeley.edu | |
Valid | |
"first(last)"@iana.org | |
Valid | |
( x ) first ( x ) . ( x) last ( x ) @iana.org | |
Valid | |
first.last @iana.org | |
Valid | |
test. obs@syntax.com | |
Valid | |
test. obs@syntax.com | |
Invalid | |
"Unicode NULL \␀"@char.com | |
Valid | |
"Unicode NULL ␀"@char.com | |
Invalid | |
Unicode NULL \␀@char.com | |
Invalid | |
cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com | |
Valid | |
first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] | |
Valid | |
first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] | |
Valid | |
first.last@[IPv6::] | |
Invalid | |
first.last@[IPv6:::] | |
Valid | |
first.last@[IPv6::::] | |
Invalid | |
first.last@[IPv6::b4] | |
Invalid | |
first.last@[IPv6:::b4] | |
Valid | |
first.last@[IPv6::::b4] | |
Invalid | |
first.last@[IPv6::b3:b4] | |
Invalid | |
first.last@[IPv6:::b3:b4] | |
Valid | |
first.last@[IPv6::::b3:b4] | |
Invalid | |
first.last@[IPv6:a1::b4] | |
Valid | |
first.last@[IPv6:a1:::b4] | |
Invalid | |
first.last@[IPv6:a1:] | |
Invalid | |
first.last@[IPv6:a1::] | |
Valid | |
first.last@[IPv6:a1:::] | |
Invalid | |
first.last@[IPv6:a1:a2:] | |
Invalid | |
first.last@[IPv6:a1:a2::] | |
Valid | |
first.last@[IPv6:a1:a2:::] | |
Invalid | |
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] | |
Valid | |
first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] | |
Valid | |
first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] | |
Valid | |
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] | |
Valid | |
first.last@[IPv6:a1:::11.22.33.44] | |
Invalid | |
first.last@[IPv6:a1:a2::11.22.33.44] | |
Valid | |
first.last@[IPv6:a1:a2:::11.22.33.44] | |
Invalid | |
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] | |
Valid | |
first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] | |
Invalid | |
first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] | |
Valid | |
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] | |
Valid | |
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 | |
test@test.com | |
Valid | |
test@example.com | |
Invalid | |
test@xn--example.com | |
Valid | |
test@Bücher.ch | |
Valid |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import sys, os | |
import re | |
pattern = r'(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*))*)?;\s*)' | |
def validate(email): | |
return re.fullmatch(pattern, email) is not None | |
def test(): | |
with open("tests.txt", 'r') as f: | |
LineNum = 0 | |
Email = None | |
All = 0 | |
Passed = 0 | |
Failed = 0 | |
FailedCases = [] | |
for Line in f: | |
if LineNum % 2 == 0: | |
Email = Line.strip() | |
else: | |
Valid = Line.strip() == "Valid" | |
if Valid == validate(Email): | |
Passed += 1 | |
else: | |
Failed += 1 | |
FailedCases.append(Email) | |
All += 1 | |
LineNum += 1 | |
print("All: {}, passed: {}, failed: {}".format(All, Passed, Failed)) | |
print("\nFailed cases:\n") | |
for Case in FailedCases: | |
print(Case) | |
if __name__ == "__main__": | |
test() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment