Как еще я могу написать эту пользовательскую валидацию в django, кроме как попробовать и исключить

как еще можно оформить эту пользовательскую функцию проверки django для проверки номера телефона США, кроме try и except block

def validate(value):
        if re.match(r"[+]?[1\s-]*[\(-]?[0-9]{3}[-\)]?[\s-]?[0-9]{3}[\s-]?[0-9]{4}",value):
            return True
        else:
            return False

Чтобы функция могла использоваться в качестве валидатора для полей Django, она должна вызывать ошибку ValueError при получении недопустимого значения.

Вот пример вашего валидатора в формате validators.py, адаптированного для соблюдения этого соглашения и использования re.compile() для ускорения сопоставления регулярных выражений:

# validators.py
import re

# Create a compiled regular expression to speed things up.
# You can also break your string into two strings, one per
# line, to improve readability:
PHONE_REGEX = re.compile(r"[+]?[1\s-]*[\(-]?[0-9]{3}[-\)]?[\s-]?"
                         r"[0-9]{3}[\s-]?[0-9]{4}")

def validate_phone_number(value):
    """Validates that a phone number matches the format
    123 456 7890, with optional dashes between digit groups
    and parentheses around the area code.
    """
    if not PHONE_REGEX.match(value):
        raise ValueError(f'{value} must be in the format 123 456 7890')

Вы можете использовать этот валидатор в models.py следующим образом:

# models.py
from django.db import models
from .validators import validate_phone_number

class YourModel(models.Model):
    phone_number = models.CharField(max_length=30, validators=[validate_phone_number])

Еще несколько заметок:

  • Просмотрите этот вопрос на StackOverflow , чтобы получить лучшие регулярные выражения для ваших телефонных номеров.
  • Обратите внимание, что не все телефонные номера состоят из десяти цифр. Если ваш сайт предназначен для международной аудитории, вам придется принимать и их телефонные номера.
Вернуться на верх