Skip to content

Email Validator

email_validator

Validator for email address format.

EmailValidator

Bases: ValidationRule

Validates that a string value is a well-formed email address.

Example
validator = EmailValidator("email_address")

errors = validator.validate("user@example.com")
assert errors == []

errors = validator.validate("not-an-email")
assert len(errors) == 1
Source code in src/forging_blocks/domain/validators/email_validator.py
class EmailValidator(ValidationRule):
    """Validates that a string value is a well-formed email address.

    Example:
        ```python
        validator = EmailValidator("email_address")

        errors = validator.validate("user@example.com")
        assert errors == []

        errors = validator.validate("not-an-email")
        assert len(errors) == 1
        ```

    """

    _EMAIL_PATTERN: re.Pattern[str] = re.compile(
        r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}"
        r"[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$"
    )

    def __init__(self, field: str) -> None:
        self._field = field

    def validate(self, value: Any) -> list[RuleViolationError]:
        if value is None or not isinstance(value, str) or not self._EMAIL_PATTERN.match(value):
            return [
                RuleViolatedError(
                    ErrorMessage(f"'{self._field}' must be a valid email address."),
                    ErrorMetadata(context={"field": self._field, "code": "invalid_email"}),
                )
            ]
        return []