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

Проверка и валидация 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
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро