1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
import re
class EmailAddressValidator:
EMAIL_REGEX_PATTERN = (
r"(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+"
r"(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|"
r'"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]'
r'|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")'
r"@"
r"(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+"
r"[a-zA-Z]{2,}|"
r"\[(?:(?:25[0-5]|2[0-4][0-9]|[21]?[0-9][0-9]?)\.){3}"
r"(?:25[0-5]|2[0-4][0-9]|[21]?[0-9][0-9]?|"
r"[a-zA-Z-]*[a-zA-Z]:"
r'(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]'
r"|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"
)
def __init__(self):
self._regex = re.compile(self.EMAIL_REGEX_PATTERN, re.IGNORECASE)
def is_valid(self, value):
value_as_str = str(value)
return bool(self._regex.match(value_as_str))
if __name__ == "__main__":
validator = EmailAddressValidator()
emails = [
"contact@example.com",
"jean.dupont123@domain.fr",
"user.name+tag+sorting@example.com",
"alice.bob@sub.domain.com",
"test_email@university.edu",
"prenom-nom@societe.co.uk",
"adresse@exemple.museum",
"info@mail-service.org",
"nom@exemple.xyz",
"john_doe@company.io",
"plainaddress",
"@missinguser.com",
"user.com",
"user@.com",
"user@com.",
"user@site..com",
".user@domain.com",
"user@domain.com.",
"user@domain,com",
"user@@domain.com",
"Abc..123@example.com"
]
for email in emails:
result = validator.is_valid(email)
print(f"{email}: {'valide' if result else 'non valide'}") |