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

Валидатор RegexValidator

Валидатор RegexValidator применяется к полям формы для проверки введенного значения на соответствие регулярному выражению. Он принимает регулярное выражение в качестве обязательного аргумента и может опционально принимать сообщение об ошибке и флаги для компиляции регулярного выражения. В случае несоответствия валидатор выбрасывает исключение ValidationError с указанным сообщением.

Синтаксис

RegexValidator(regex, message=None, code=None, flags=0)

Параметры конструктора:

  • regex - обязательный параметр, строка с регулярным выражением или скомпилированный объект регулярного выражения;
  • message - опциональное сообщение об ошибке, которое будет показано при несоответствии значения;
  • code - опциональный код ошибки для идентификации типа ошибки валидации;
  • flags - опциональные флаги для компиляции регулярного выражения, например, re.IGNORECASE.

Пример

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

from django import forms from django.core.validators import RegexValidator class UserRegistrationForm(forms.Form): username = forms.CharField( label="Username", max_length=20, validators=[ RegexValidator( regex=r'^[a-zA-Z0-9_]+$', message="Username must contain only letters, digits and underscore", code="invalid_username" ) ] )

Пример

Рассмотрим валидацию номера телефона в формате +7 (XXX) XXX-XX-XX с использованием флага для игнорирования регистра (хотя в данном примере это не принципиально):

import re from django import forms from django.core.validators import RegexValidator class ContactForm(forms.Form): phone = forms.CharField( label="Phone number", validators=[ RegexValidator( regex=r'^\+\d{1,3}\s\(\d{3}\)\s\d{3}-\d{2}-\d{2}$', message="Enter phone in format: +7 (XXX) XXX-XX-XX", flags=re.IGNORECASE ) ] )

Пример

Используем встроенную функцию валидации в модели, применяя RegexValidator для проверки поля slug:

from django.db import models from django.core.validators import RegexValidator class Article(models.Model): title = models.CharField(max_length=200) slug = models.SlugField( max_length=50, validators=[ RegexValidator( regex=r'^[a-z0-9-]+$', message="Slug must contain only lowercase letters, digits and hyphens", code="invalid_slug" ) ] ) def __str__(self): return self.title

Пример

Проверим работу валидатора на форме с обработкой ошибок:

from django import forms from django.core.validators import RegexValidator class ProductForm(forms.Form): article_code = forms.CharField( label="Article code", max_length=10, validators=[ RegexValidator( regex=r'^[A-Z]{2}\d{4}$', message="Code must be 2 uppercase letters and 4 digits (e.g., AB1234)" ) ] ) # Создаем экземпляр формы с валидными данными form_valid = ProductForm({'article_code': 'AB1234'}) if form_valid.is_valid(): res = "Form is valid" print(res) # Создаем экземпляр формы с невалидными данными form_invalid = ProductForm({'article_code': 'ab1234'}) if not form_invalid.is_valid(): res = form_invalid.errors['article_code'] print(res)

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

"Form is valid" "['Code must be 2 uppercase letters and 4 digits (e.g., AB1234)']"

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

  • валидатор EmailValidator,
    который проверяет корректность email-адреса
  • валидатор URLValidator,
    который проверяет корректность URL-адреса
  • валидатор DomainNameValidator,
    который проверяет корректность доменного имени
  • поле RegexField,
    которое использует RegexValidator для проверки вводимых данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить