Summary
| aftership-email-verifier |
20 |
6 |
0 |
| apache-commons-validator |
20 |
4 |
2 |
| checkmail |
23 |
2 |
1 |
| deep-email-validator |
14 |
3 |
9 |
| django-emailvalidator |
18 |
8 |
0 |
| egulias-email-validator |
21 |
2 |
3 |
| email-addresses |
25 |
0 |
1 |
| email-valid-perl |
24 |
1 |
1 |
| email-validator |
16 |
10 |
0 |
| emailvalidation-dotnet |
19 |
7 |
0 |
| hibernate-validator |
21 |
4 |
1 |
| joi |
17 |
9 |
0 |
| libvldmail |
23 |
1 |
2 |
| mailaddress-dotnet |
20 |
3 |
3 |
| mailkit-dotnet |
25 |
0 |
1 |
| net-mail |
21 |
4 |
1 |
| php-filter-var |
18 |
8 |
0 |
| pyisemail |
19 |
6 |
1 |
| python-email-validator |
20 |
6 |
0 |
| rust-email-address |
22 |
3 |
1 |
| symfony-validator |
14 |
10 |
2 |
| truemail |
14 |
10 |
2 |
| valid-email2 |
19 |
6 |
1 |
| validator-js |
21 |
5 |
0 |
| validator-rust |
15 |
8 |
3 |
| wordpress-is-email |
14 |
10 |
2 |
| zod |
14 |
12 |
0 |
Expected Valid Emails
- ✓ = correctly accepted
- ✗ = false negative (incorrectly rejected)
| aftership-email-verifier |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✓ |
✗ |
| apache-commons-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✗ |
| checkmail |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✗ |
✓ |
| deep-email-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✗ |
| django-emailvalidator |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✗ |
✗ |
✗ |
✓ |
✗ |
✗ |
✗ |
| egulias-email-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✓ |
✓ |
| email-addresses |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| email-valid-perl |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
| email-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
| emailvalidation-dotnet |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
| hibernate-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✗ |
| joi |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✓ |
✗ |
| libvldmail |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| mailaddress-dotnet |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✓ |
✓ |
| mailkit-dotnet |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| net-mail |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✗ |
| php-filter-var |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✗ |
✗ |
✓ |
✗ |
✗ |
✗ |
✗ |
| pyisemail |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✗ |
✗ |
| python-email-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✓ |
✗ |
| rust-email-address |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✓ |
✓ |
| symfony-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
| truemail |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✓ |
✗ |
| valid-email2 |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
| validator-js |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✗ |
✓ |
✗ |
✓ |
✗ |
| validator-rust |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✓ |
✓ |
✗ |
✗ |
| wordpress-is-email |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
| zod |
✓ |
✓ |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
Test Case Legend
hi@stavros.io - simple test case
hi+there@stavros.io - plus is allowed
stavros.k@stavros.io - dot in local part is valid
(separates “atoms”)
f*uck@stavros.io - asterisks are allowed in local
part
#$%!^/&@stavros.io - all valid characters in local
part
(sta)vros@stavros.io - (sta) is a comment, valid at
beginning
stavros@stavros.io(io) - (io) is a comment, valid at
end
"hi@you"@stavros.io - quoted @ symbol in local part is
allowed
"hi you"@stavros.io - quoted space in local part is
allowed
" "@stavros.io - quoted space in local part is
allowed
"<\"@\\".!.#%$@stavros.io - quotes are separated by
dots
cow@[dead::beef] - IPv6 domain part
stavros@io - domain part is TLD
我買@屋企.香港 - valid Unicode characters
1@[23456789] - [23456789] is a decimal IPv4
address
Expected Invalid Emails
- ✓ = correctly rejected
- ✗ = false positive (incorrectly accepted)
| aftership-email-verifier |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| apache-commons-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✗ |
✓ |
| checkmail |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| deep-email-validator |
✓ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✗ |
✓ |
| django-emailvalidator |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| egulias-email-validator |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
✓ |
✓ |
✗ |
✗ |
| email-addresses |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| email-valid-perl |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| email-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| emailvalidation-dotnet |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| hibernate-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| joi |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| libvldmail |
✗ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| mailaddress-dotnet |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| mailkit-dotnet |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| net-mail |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| php-filter-var |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| pyisemail |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| python-email-validator |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| rust-email-address |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| symfony-validator |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| truemail |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| valid-email2 |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
✓ |
✓ |
| validator-js |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| validator-rust |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✗ |
| wordpress-is-email |
✓ |
✗ |
✗ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
| zod |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
Test Case Legend
hi@ - missing domain part
stavros.@stavros.io - dot at end of local part (empty
atom)
stavros..k@stavros.io - two dots in sequence in local
part (empty atom)
!#$%&'*(-/=?@stavros.io - unmatched opening
parenthesis (unfinished comment)
h(a)i@stavros.io - parentheses (comment) in the middle
of local part
em@il@stavros.io - two @ symbols
"<\"@\".!#%$@stavros.io - unmatched quotation mark
(the initial one)
<\"@\\".!#%$@stavros.io - unmatched quotation mark
(the one before “.”)
hi"@"you@stavros.io - quoted parts must be atoms
(dot-separated)
hi\ there@stavros.io - spaces must be quoted even if
escaped
1@23456789 - 23456789 is not a valid TLD