Гид по технологиям

Проверка пользовательских данных с помощью регулярных выражений

5 min read Разработка Обновлено 03 Jan 2026
Валидация пользовательских данных с RegEx
Валидация пользовательских данных с RegEx

фрагмент кода с регулярными выражениями

Регулярные выражения — универсальный инструмент для поиска, сопоставления и разборки текста. С их помощью можно быстро проверить, соответствует ли ввод пользователя ожидаемому формату. RegEx поддерживают многие языки и инструменты, включая Python и JavaScript.

Что проверять в первых шагах

  • Нормализуйте ввод (уберите лишние пробелы с краёв).
  • Решите, что считать допустимым (ASCII или Unicode).
  • Делайте проверки как на клиенте, так и на сервере: клиент для UX, сервер для безопасности.

Важно: регулярные выражения проверяют формат, но не гарантируют безопасность (например, не заменяют сопутствующую проверку длины поля, ограничение частоты запросов или привязку к существующим учетным записям).

Валидация имени пользователя

Требования примера:

  1. Длина от 5 до 15 символов.
  2. Только буквы, цифры и подчёркивание (_).
  3. Первый символ — буква.

Шаблон, удовлетворяющий условиям:

^[A-Za-z]\w{4,14}$

Разбор шаблона:

  • ^[A-Za-z] — строка начинается с буквы латинского алфавита.
  • \w{4,14} — затем 4–14 символов: буквы, цифры или подчёркивание.
  • $ — конец строки.

Пример на Python:

import re

def checkUsername(username):
    regex = '^[A-Za-z]\\w{4,14}$'
    r = re.compile(regex)

    if re.search(r, username):
        print('Valid')
    else:
        print('Not Valid')

username1 = 'yuvraj_chandra'
checkUsername(username1)

username2 = 'ja7&^%87'
checkUsername(username2)

Вывод (скриншот):

Вывод проверки имени пользователя

Пример на JavaScript:

function checkUsername(user) {
    if(/^[A-Za-z][A-Za-z0-9_]{4,14}$/.test(user)) {
        console.log('Valid');
    } else {
        console.log('Not Valid');
    }
}

checkUsername('yuvraj_chandra');
checkUsername('ja7&^%87');

Советы и подводные камни:

  • Если ваша аудитория использует нелатинские имена, продумайте поддержку Unicode (например, \p{L} в движках, которые это поддерживают).
  • Решите заранее, нужны ли дефисы или точки в именах: при добавлении символов обновите шаблон.

Валидация адреса электронной почты

Структура адреса электронной почты

Важно: универсального RegEx для всех корректных email нет — стандарты (RFC) допускают сложные случаи. Здесь приведён рабочий компромисс для большинства случаев.

Условия примера:

  1. Локальная часть: буквы, цифры, подчёркивания, дефисы и точки.
  2. Один символ @.
  3. Имя домена: буквы, цифры, подчёркивания или дефисы.
  4. После домена обязателен точечный разделитель.
  5. Доменное расширение: буквы, цифры, подчёркивания или дефисы.
  6. Длина доменного расширения: 2–4 символа.

Шаблон:

^[\w.-]+@([\w-]+\.)+[\w-]{2,4}$

Пример на Python:

import re

def checkEmailId(email):
    regex = '^[\\w.-]+@([\\w-]+\\.)+[\\w-]{2,4}$'
    r = re.compile(regex)

    if re.search(r, email):
        print('Valid')
    else:
        print('Not Valid')

email1 = 'abc@gmail.com'
checkEmailId(email1)

email2 = 'abc@def@gmail.kahscg'
checkEmailId(email2)

Вывод (скриншот):

Вывод проверки email

Пример на JavaScript:

function checkEmailId(email) {
    if (/^[\\w.-]+@([\\w-]+\\.)+[\\w-]{2,4}$/.test(email)) {
        console.log('Valid');
    } else {
        console.log('Not Valid');
    }
}

checkEmailId('abc@gmail.com');
checkEmailId('abc@def@gmail.kahscg');

Когда RegEx для email не подходит:

  • Адреса с кавычками или комментариями по стандарту RFC не будут приняты этим шаблоном.
  • Международные домены (IDN) и локальные части с юникод-символами потребуют расширенного синтаксиса.

Альтернатива: использовать валидацию на уровне сервера с почтовой проверкой (отправка подтверждающего письма) или специализированные библиотеки для валидации email.

Проверка сложности пароля

Правила примера:

  1. Минимум 8 символов.
  2. Есть хотя бы одна цифра.
  3. Есть хотя бы одна заглавная буква.
  4. Есть хотя бы одна строчная буква.
  5. Есть хотя бы один специальный символ.

Шаблон:

(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{8,})

Пример на Python:

import re

def checkPasswordStrength(password):
    regex = '(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{8,})'
    r = re.compile(regex)

    if re.search(r, password):
        print('Strong Password')
    else:
        print('Weak Password')

password1 = 'Hiuahd$5jawd'
checkPasswordStrength(password1)

password2 = 'my_password'
checkPasswordStrength(password2)

Вывод (скриншот):

Вывод проверки пароля

Пример на JavaScript:

function checkPasswordStrength(password) {
    if (/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{8,})/.test(password)) {
        console.log('Strong Password');
    } else {
        console.log('Weak Password');
    }
}

checkPasswordStrength('Hiuahd$5jawd');
checkPasswordStrength('my_password');

Примечание по безопасности:

  • RegEx помогают отбраковать слабые пароли по формату, но не заменяют проверок по словарю (чёрный список), проверок похожих паролей и многофакторной аутентификации.

Проверка формата даты (mm/dd/yyyy)

Шаблон, который проверяет формат даты (но не корректность календарной даты):

^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$

Ограничения:

  • Шаблон гарантирует вид «месяц/день/год», но не отбрасывает такие даты, как 02/31/2020.
  • Для строгой проверки используйте разбор даты в языке (например, datetime в Python) после проверки формата.

Пример на Python:

import re

def checkDateFormat(date):
    regex = '^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d$'
    r = re.compile(regex)
    if re.search(r, date):
        print('Valid')
    else:
        print('Not Valid')

date1 = '03/21/2002'
checkDateFormat(date1)

date2 = '15/21/2002'
checkDateFormat(date2)

Пример на JavaScript:

function checkDateFormat(date) {
    if(/^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d$/.test(date)) {
        console.log('Valid');
    } else {
        console.log('Not Valid');
    }
}

checkDateFormat('03/21/2002');
checkDateFormat('15/21/2002');

Проверка пустой строки

Шаблон для проверки пустой строки:

^$

Примеры на Python и JavaScript:

import re

def checkEmptyString(s):
    regex = '^$'
    r = re.compile(regex)

    if re.search(r, s):
        print('The given string is empty')
    else:
        print('The given string is not empty')

checkEmptyString('')
checkEmptyString('This is not an empty string')
function checkEmptyString(s) {
    if (/^$/.test(s)) {
        console.log('The given string is empty');
    } else {
        console.log('The given string is not empty');
    }
}

checkEmptyString('');
checkEmptyString('This is not an empty string');

Вывод проверки пустой строки

Проверка ZIP-кода (США)

Шаблон для пятизначного и ZIP+4 формата:

^[0-9]{5}(?:-[0-9]{4})?$

Пример на Python:

import re

def validateZIPCode(code):
    regex = '^[0-9]{5}(?:-[0-9]{4})?$'
    r = re.compile(regex)

    if re.search(r, code):
        print('Valid')
    else:
        print('Not Valid')

validateZIPCode('76309')
validateZIPCode('83468-2348')
validateZIPCode('234445')

Пример на JavaScript:

function validateZIPCode(code) {
    if (/^[0-9]{5}(?:-[0-9]{4})?$/.test(code)) {
        console.log('Valid');
    } else {
        console.log('Not Valid');
    }
}

validateZIPCode('76309');
validateZIPCode('83468-2348');
validateZIPCode('234445');

Вывод проверки ZIP-кода

Когда одной валидации RegEx недостаточно

  • Формат присутствует, но значение некорректно (например, дата 02/30).
  • RegEx не проверит уникальность (логины) или существование ресурса (email).
  • Международные требования (IDN, Unicode) часто требуют расширенных шаблонов.

Рекомендация: комбинируйте RegEx с семантической валидацией и серверной логикой.

Практическая методология валидации (мини-SOP)

  1. Нормализация: trim(), NFC/NFD при необходимости для Unicode.
  2. Базовая RegEx-валидация формата для быстрого отклика.
  3. Семантическая проверка (парсинг даты, проверка домена, отправка подтверждения).
  4. Санитизация данных перед сохранением.
  5. Логирование и ограничения частоты запросов.

Важно: никогда не полагайтесь только на клиентскую валидацию.

Чеклист ролей

  • Для разработчика:
    • Добавьте и тестируйте RegEx в юнит-тестах.
    • Документируйте ожидаемые форматы.
  • Для QA:
    • Тест-кейсы: граничные длины, недопустимые символы, локали.
  • Для DevOps/Sec:
    • Ограничьте скорость запросов на уровне API.
    • Включите журналирование и мониторинг отказов валидации.

Тестовые случаи и критерии приёмки

Для каждого шаблона подготовьте набор тестов:

  • Позитивные: корректные примеры формата.
  • Негативные: недопустимые символы, превышение длины, пустые строки.
  • Граничные: минимальная/максимальная длина.

Критерии приёмки:

  • 100% позитивные тесты проходят.
  • 0% негативных тестов проходят.
  • Результаты проверены на целевой платформе (Python/JS).

Подсказки по производительности

  • Компилируйте регулярные выражения один раз (re.compile в Python).
  • Избегайте чрезмерно сложных шаблонов с backtracking (может замедлить или привести к DoS).
  • Там, где нужно — используйте более простую валидацию и последующую семантическую проверку.

Маленький глоссарий (1 строка каждый)

  • RegEx — язык шаблонов для поиска и сопоставления строк.
  • Локальная часть — часть email до символа @.
  • ZIP+4 — расширенный формат почтового индекса США (5-шт + 4).

Резюме

  • RegEx удобны для быстрой проверки формата ввода.
  • Используйте их как первый этап — затем семантическая валидация и серверная проверка.
  • Тестируйте граничные случаи и документируйте допустимые символы.

Итог: правильно настроенные регулярные выражения повышают качество ввода и улучшают UX, но не заменяют полноценную серверную проверку и меры безопасности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Windows 10: управление местоположением и приватность
Приватность

Windows 10: управление местоположением и приватность

Исправить Update failed в Google Chrome на Windows
Техподдержка

Исправить Update failed в Google Chrome на Windows

Исправить ошибку 0x80073712 в Windows
Windows

Исправить ошибку 0x80073712 в Windows

Как изменить MAC-адрес в Windows
Сети

Как изменить MAC-адрес в Windows

Как опубликовать видео с YouTube в Instagram
соцсети

Как опубликовать видео с YouTube в Instagram

Исправление ошибок Windows через CMD
Windows

Исправление ошибок Windows через CMD