Как еще я могу написать эту пользовательскую валидацию в 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 , чтобы получить лучшие регулярные выражения для ваших телефонных номеров.
- Обратите внимание, что не все телефонные номера состоят из десяти цифр. Если ваш сайт предназначен для международной аудитории, вам придется принимать и их телефонные номера.