Source code for src.share_kernel.domain.value_objects.phone
import re
from dataclasses import dataclass
from src.share_kernel.domain.base_value_object import ValueObject
from src.share_kernel.domain.exceptions import InvalidValueObjectException
# Format E.164 : +[code pays][numéro], ex: +33612345678
_E164_REGEX = re.compile(r"^\+[1-9]\d{6,14}$")
[docs]
@dataclass(frozen=True)
class PhoneNumber(ValueObject):
"""
Numéro de téléphone au format E.164.
Exemple : PhoneNumber(value="+33612345678")
"""
value: str
def __post_init__(self):
# Supprime les espaces avant validation
object.__setattr__(self, "value", self.value.replace(" ", ""))
super().__post_init__()
def _validate(self):
if not _E164_REGEX.match(self.value):
raise InvalidValueObjectException(
f"Numéro de téléphone invalide : '{self.value}'. "
"Format attendu : E.164 (ex: +33612345678)"
)
def __str__(self) -> str:
return self.value