strings.is_valid_email_address

Implements an is valid email address algorithm

@ https://en.wikipedia.org/wiki/Email_address

Attributes

MAX_DOMAIN_OCTETS

MAX_LOCAL_PART_OCTETS

email_tests

is_valid

Functions

is_valid_email_address(→ bool)

Returns True if the passed email address is valid.

Module Contents

strings.is_valid_email_address.is_valid_email_address(email: str) bool

Returns True if the passed email address is valid.

The local part of the email precedes the singular @ symbol and is associated with a display-name. For example, “john.smith” The domain is stricter than the local part and follows the @ symbol.

Global email checks:
  1. There can only be one @ symbol in the email address. Technically if the @ symbol is quoted in the local-part, then it is valid, however this implementation ignores “” for now. (See https://en.wikipedia.org/wiki/Email_address#:~:text=If%20quoted,)

  2. The local-part and the domain are limited to a certain number of octets. With unicode storing a single character in one byte, each octet is equivalent to a character. Hence, we can just check the length of the string.

Checks for the local-part:
  1. The local-part may contain: upper and lowercase latin letters, digits 0 to 9, and printable characters (!#$%&’*+-/=?^_`{|}~)

  2. The local-part may also contain a “.” in any place that is not the first or last character, and may not have more than one “.” consecutively.

Checks for the domain:
  1. The domain may contain: upper and lowercase latin letters and digits 0 to 9

  2. Hyphen “-”, provided that it is not the first or last character

  3. The domain may also contain a “.” in any place that is not the first or last character, and may not have more than one “.” consecutively.

>>> for email, valid in email_tests:
...     assert is_valid_email_address(email) == valid
strings.is_valid_email_address.MAX_DOMAIN_OCTETS = 255
strings.is_valid_email_address.MAX_LOCAL_PART_OCTETS = 64
strings.is_valid_email_address.email_tests: tuple[tuple[str, bool], Ellipsis] = (('simple@example.com', True), ('very.common@example.com', True),...
strings.is_valid_email_address.is_valid = False