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

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

6 min read Программирование Обновлено 06 Dec 2025
Валидация URL: regex и практические методы
Валидация URL: regex и практические методы

Регулярное выражение — быстрый способ базовой валидации URL: проверяет схему (http/https), домен, TLD и путь. Это простой фильтр для пользовательских форм и быстрой предвалидации, но не заменяет полноценный парсер URL и не покрывает все допустимые случаи (IP, Punycode, редкие TLD, другие протоколы). В статье объяснено предложенное регулярное выражение, показаны примеры для Python и JavaScript, приведены ограничения и альтернативные подходы, а также чек-листы и набор тестов.

Иллюстрация: HTML с упоминанием URL

Программирование делает работу с текстовыми данными — структурированными и неструктурированными — гораздо проще. Инструменты вроде регулярных выражений и внешних библиотек упрощают задачу валидации URL. В этой статье показано простое регулярное выражение для проверки URL, объяснены его части и ограничения, а также приведены примеры использования в Python и JavaScript.

Важно: приведённое ниже регулярное выражение не покрывает все возможные, но редкие, варианты допустимых URL. Оно предназначено для простых сценариев и предвалидации.

Что делает это регулярное выражение

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

  • Строка начинается с http или https, за которыми следует ://.
  • Далее идёт допустимая комбинация символов для поддомена и корневого домена: буквы, цифры и набор специальных символов из разрешённого множества.
  • Общая длина части «поддомен + домен» ограничена — в выражении используется граница 2–256 символов (эта граница — эмпирическая, для фильтрации слишком коротких/длинных вариантов).
  • После доменной части должен идти точечный разделитель и TLD, состоящий только из букв и длиной 2–6 символов (в этом выражении ограничение 2–6).
  • После TLD может идти путь, параметры или query-строка — набор допустимых символов повторяется ноль или более раз.
  • Регулярное выражение проверяет всю строку от начала до конца, то есть ^…$.

Важно: реальные правила для TLD и длины домена шире, чем здесь. Многие современные TLD длиннее 6 символов (например, .technology), а сами домены могут содержать Unicode (Punycode) и IP-адреса как хосты. Если нужно покрыть все варианты, используйте парсер URL или специализированные библиотеки.

Регулярные выражения в примерах

Ниже — варианты регулярного выражения и их использование в коде.

JavaScript (регулярное выражение для простых случаев):

/^(http(s):\/\/.)[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/

Python (строка-паттерн для re):

r"^((http|https)://)[-a-zA-Z0-9@:%._\\+~#?&//=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%._\\+~#?&//=]*)$"

Пояснения к фрагментам паттерна (одно предложение на ключевой токен):

  • (http|https):// — гарантирует схему http или https и обязательный разделитель ://.
  • [-a-zA-Z0-9@:%._+~#?&//=] — разрешённые символы в поддомене/домене/пути; набор включает буквы, цифры и часто используемые символы URL.
  • {2,256} — длина комбинированной части «поддомен + домен» (эмпирическое ограничение).
  • \. — экранированная точка между доменом и TLD.
  • [a-z]{2,6} — TLD только из букв, длина 2–6.
  • \b — граница слова, помогает корректно отделять TLD.
  • ([-…]* ) — остаток URL: путь, параметры, фрагменты; повторяется 0 или более раз.
  • ^ и $ — начало и конец строки, проверка на полное соответствие.

Примеры URL, которые удовлетворяют этому паттерну

Примеры кода

Python: простой валидатор, использующий re

import re

def validate_url(url):
    regex = r"^((http|https)://)[-a-zA-Z0-9@:%._\\+~#?&//=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%._\\+~#?&//=]*)$"
    pattern = re.compile(regex)
    if re.search(pattern, url):
        print('Valid')
    else:
        print('Not Valid')

# Примеры
validate_url('https://www.linkedin.com/')
validate_url('http://apple')
validate_url('iywegfuykegf')
validate_url('https://w')

JavaScript: функция для проверки

function validateURL(url) {
  var re = /^(http(s):\/\/.)[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/g;
  if (re.test(url)) {
    console.log('Valid');
  } else {
    console.log('Not Valid');
  }
}

validateURL('https://www.linkedin.com/');
validateURL('http://apple');
validateURL('iywegfuykegf');
validateURL('https://w');

Структура URL: части адреса

Где это удобно использовать

  • Валидация полей формы (контактные формы, профиль пользователя) — быстрая предвалидация на клиенте и/или сервере.
  • Фильтрация и извлечение ссылок из текста для дальнейшей обработки.
  • Предварительная проверка ссылок перед асинхронной валидацией/проверкой доступности.

Когда регулярное выражение не подходит — типичные ограничения

  • IP-адреса в хосте (например, http://127.0.0.1) могут не пройти — паттерн ориентирован на доменные имена.
  • Международные домены (IDN / Punycode) и Unicode-символы в домене/пути не покрываются.
  • Некоторые новые или длинные TLD превосходят ограничение {2,6}.
  • Протоколы, отличные от http/https (ftp, ws, mailto и т. п.), не будут признаны корректными.
  • Сложные или особые схемы авторизации, нестандартные порты и нетипичные символы в URL могут вызвать ложные срабатывания.

Альтернативные подходы (рекомендуется для продакшена)

  • Использовать встроенные парсеры URL:
    • В JavaScript: конструктор URL (new URL(value)) — он корректно разбирает большинство случаев и бросает исключение для некорректных строк.
    • В Python: urllib.parse.urlparse и последующая валидация полей.
  • Пользоваться проверенными библиотеками валидации URL:
    • На Python: validators, rfc3986 и другие.
    • На JavaScript/Node.js: validator.js или WHATWG URL.
  • Приём: комбинировать быструю регексп-предвалидацию с последующей строгой серверной проверкой через парсер.

Мини‑методология: как выбрать стратегию валидации URL

  1. Определите требования: принимаете ли вы только http/https, нужна ли поддержка IDN, дозволены ли IP в хосте.
  2. Для простых входных форм применяйте короткую регексп-предвалидацию на клиенте (UX).
  3. На сервере используйте строгий парсер и дополнительные проверки (разрешённые домены, проверка доступности, допустимые протоколы).
  4. Логируйте отклонённые URL и случаи false-negative, чтобы корректировать паттерн или правила.

Контроль качества: тесты и критерии приёмки

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

  • Функция возвращает ‘Valid’ для всех базовых корректных URL из списка требований.
  • Функция возвращает ‘Not Valid’ для строк без схемы или без корректного домена.
  • Документирован список известных ограничений (IP, IDN, нестандартные TLD).
  • Сценарий для регрессионных тестов присутствует в CI.

Минимальные тест-кейсы

Практическое руководство для ролей

Developer

  • Использовать регексп для быстрой валидации на клиенте.
  • Валидация на сервере — через парсер/библиотеку.
  • Логирование и метрики по отклонённым URL.

QA

  • Подготовить набор тестовых URL (валидные/невалидные/граничные).
  • Проверить поведение на разных локалях и кодировках.

Security

  • Убедиться, что валидация не позволяет SSRF/инъекции (например, разрешать только белый список доменов для внутренних операций).
  • Проверять и нормализовать вход перед последующим использованием.

Быстрый лист (cheat sheet)

  • Если нужен простой фильтр — используйте предложенный regex.
  • Для надёжной валидации — используйте парсер URL (new URL в браузере или urllib.parse в Python).
  • Всегда проверяйте на стороне сервера.

Примеры отказа: когда нужно изменить стратегию

  • Приложение принимает ссылки из разных стран — требуется поддержка IDN.
  • Система должна обрабатывать FTP/MAILTO/WS — нужно расширить паттерн или применять парсер.
  • Требуется проверять принадлежность домена конкретной организации — регексп недостаточен, нужна проверка DNS/WHOIS/списки.

Вывод терминала: проверка URL

Резюме

Регулярное выражение — удобный инструмент для быстрой предвалидации URL в простых сценариях. Оно помогает отсеивать явно неверные строки до более дорогой серверной проверки. Однако для надёжной и полной валидации в продакшене предпочтительнее использовать парсер URL или проверенные библиотеки: они корректнее обрабатывают IP-хосты, IDN, редкие TLD и особенности протоколов.

Ключевые рекомендации:

  • Используйте регексп для UX (клиентская предвалидация).
  • Всегда подтверждайте входные данные на сервере с помощью парсера.
  • Документируйте ограничения паттерна и добавляйте тесты для граничных случаев.

Краткое примечание: если ваша задача — строгая совместимость с RFC 3986 и современными IDN/TLD, доверьте валидацию специализированным библиотекам, а регулярные выражения применяйте лишь для быстрых проверок.

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

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

Как устроить идеальную вечеринку для просмотра ТВ
Развлечения

Как устроить идеальную вечеринку для просмотра ТВ

Как распаковать несколько RAR‑файлов сразу
Инструменты

Как распаковать несколько RAR‑файлов сразу

Приватный просмотр в Linux: как и зачем
Приватность

Приватный просмотр в Linux: как и зачем

Windows 11 не видит iPod — способы исправить
Руководство

Windows 11 не видит iPod — способы исправить

PS5: как настроить игровые пресеты
Консоли

PS5: как настроить игровые пресеты

Как переключить камеру в Omegle на iPhone и Android
Руководство

Как переключить камеру в Omegle на iPhone и Android