РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
433 of 818 menu

Поле RegexField

Поле RegexField применяется в формах Django для валидации строковых значений на соответствие регулярному выражению. Оно наследуется от CharField и добавляет обязательный параметр regex, в который передается скомпилированное регулярное выражение или строка с шаблоном. При инициализации поля можно указать дополнительный параметр max_length, ограничивающий максимальную длину строки. Также доступны параметры min_length, strip и стандартные аргументы для всех полей форм, такие как label, initial, required и error_messages.

Синтаксис

from django import forms import re regex_field = forms.RegexField( regex=re.compile(r'^[A-Z]{3}-\d{4}$'), max_length=8, min_length=8, label='Код продукта', required=True, error_messages={ 'invalid': 'Введите код в формате XXX-1234', } )

Пример . Создание формы с RegexField

Создадим форму регистрации пользователя, в которой поле имени пользователя должно содержать только латинские буквы, цифры и символ подчеркивания:

from django import forms import re class RegistrationForm(forms.Form): username = forms.RegexField( regex=re.compile(r'^[a-zA-Z0-9_]{4,20}$'), label='Имя пользователя', max_length=20, min_length=4, error_messages={ 'invalid': 'Имя может содержать только буквы, цифры и подчеркивание', 'min_length': 'Имя должно быть не короче 4 символов', } ) email = forms.EmailField(label='Email') password = forms.CharField( widget=forms.PasswordInput(), label='Пароль' )

Пример . Обработка формы в представлении

Рассмотрим, как обрабатывать форму с полем RegexField в представлении:

from django.shortcuts import render from .forms import RegistrationForm def register(request): if request.method == 'POST': form = RegistrationForm(request.POST) if form.is_valid(): username = form.cleaned_data['username'] # Дальнейшая обработка данных return render(request, 'success.html', { 'username': username }) else: form = RegistrationForm() return render(request, 'register.html', { 'form': form })

Пример . Использование в шаблоне

Выведем форму в шаблоне с отображением ошибок валидации:

<form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Зарегистрироваться</button> </form> {% if form.username.errors %} <div class="errors"> {% for error in form.username.errors %} <p>{{ error }}</p> {% endfor %} </div> {% endif %}

Пример . Валидация телефонного номера

Поле RegexField удобно использовать для проверки формата телефонных номеров. Например, для российских номеров в формате +7 XXX XXX-XX-XX:

from django import forms import re class ContactForm(forms.Form): name = forms.CharField(label='Имя', max_length=50) phone = forms.RegexField( regex=re.compile(r'^\+7\s\d{3}\s\d{3}-\d{2}-\d{2}$'), label='Телефон', max_length=18, error_messages={ 'invalid': 'Введите номер в формате +7 XXX XXX-XX-XX', } ) # Проверка валидности form = ContactForm({ 'name': 'Иван Петров', 'phone': '+7 912 345-67-89' }) if form.is_valid(): res = form.cleaned_data print(res) else: print(form.errors)

Результат выполнения кода:

{'name': 'Иван Петров', 'phone': '+7 912 345-67-89'}

Пример . С динамической валидацией

Можно использовать RegexField с параметром strip для удаления пробелов перед валидацией:

from django import forms import re class CodeForm(forms.Form): promo_code = forms.RegexField( regex=re.compile(r'^[A-Z0-9]{6}$'), label='Промокод', max_length=6, min_length=6, strip=True, error_messages={ 'invalid': 'Промокод должен состоять из 6 заглавных букв и цифр', } ) # Проверка с пробелами form = CodeForm({ 'promo_code': ' ABC123 ' }) if form.is_valid(): res = form.cleaned_data print(res) else: print(form.errors)

Результат выполнения кода:

{'promo_code': 'ABC123'}

Смотрите также

  • поле CharField,
    которое является базовым для строковых полей
  • поле EmailField,
    которое проверяет корректность электронной почты
  • поле SlugField,
    которое валидирует строки для использования в URL
  • валидатор RegexValidator,
    который можно использовать для валидации отдельных полей моделей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить