Email Validator Comparison

Summary

Library Correct False Negatives False Positives
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

Library 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
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

  1. hi@stavros.io - simple test case
  2. hi+there@stavros.io - plus is allowed
  3. stavros.k@stavros.io - dot in local part is valid (separates “atoms”)
  4. f*uck@stavros.io - asterisks are allowed in local part
  5. #$%!^/&@stavros.io - all valid characters in local part
  6. (sta)vros@stavros.io - (sta) is a comment, valid at beginning
  7. stavros@stavros.io(io) - (io) is a comment, valid at end
  8. "hi@you"@stavros.io - quoted @ symbol in local part is allowed
  9. "hi you"@stavros.io - quoted space in local part is allowed
  10. " "@stavros.io - quoted space in local part is allowed
  11. "<\"@\\".!.#%$@stavros.io - quotes are separated by dots
  12. cow@[dead::beef] - IPv6 domain part
  13. stavros@io - domain part is TLD
  14. 我買@屋企.香港 - valid Unicode characters
  15. 1@[23456789] - [23456789] is a decimal IPv4 address

Expected Invalid Emails

Library 1 2 3 4 5 6 7 8 9 10 11
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

  1. hi@ - missing domain part
  2. stavros.@stavros.io - dot at end of local part (empty atom)
  3. stavros..k@stavros.io - two dots in sequence in local part (empty atom)
  4. !#$%&'*(-/=?@stavros.io - unmatched opening parenthesis (unfinished comment)
  5. h(a)i@stavros.io - parentheses (comment) in the middle of local part
  6. em@il@stavros.io - two @ symbols
  7. "<\"@\".!#%$@stavros.io - unmatched quotation mark (the initial one)
  8. <\"@\\".!#%$@stavros.io - unmatched quotation mark (the one before “.”)
  9. hi"@"you@stavros.io - quoted parts must be atoms (dot-separated)
  10. hi\ there@stavros.io - spaces must be quoted even if escaped
  11. 1@23456789 - 23456789 is not a valid TLD