Валидация доменных имен

Проверка формата FQDN

В библиотеке Validator.js для проверки доменных имен используется метод isFQDN, предназначенный для валидации полностью квалифицированных доменных имен (Fully Qualified Domain Name). Под этим термином понимается строка, представляющая корректную структуру домена, включающую поддомены, основное имя и домен верхнего уровня.

Базовая проверка ориентируется на соответствие домена стандартам DNS-структуры:

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

Простейший вызов:

const validator = require('validator');

validator.isFQDN('example.com');

Возвращаемое значение — логическое, отражающее корректность структуры.


Основные параметры isFQDN

Функция поддерживает расширенные настройки, позволяющие адаптировать проверку под разные сценарии использования.

validator.isFQDN(str, options);

Ключевые параметры options:

  • require_tld Определяет обязательность наличия домена верхнего уровня. При значении true строка localhost будет считаться некорректной, тогда как example.com — валидной.

  • allow_underscores Разрешает использование символа _ в доменных частях. Это отклонение от строгого RFC, но встречается в некоторых внутренних сетях.

  • allow_trailing_dot Позволяет завершающую точку в домене (example.com.), что соответствует формату FQDN в некоторых системах DNS.

  • allow_numeric_tld Разрешает числовые домены верхнего уровня, хотя в реальной DNS-инфраструктуре это редкий и нестандартный случай.

  • allow_wildcard Поддержка wildcard-доменов (*.example.com), используемых в SSL-сертификатах и маршрутизации.

Пример комплексной настройки:

validator.isFQDN('sub.example.com', {
  require_tld: true,
  allow_underscores: false,
  allow_trailing_dot: false,
  allow_numeric_tld: false,
  allow_wildcard: false
});

Структура доменного имени

Валидация строится на анализе сегментов, разделённых точками. Каждый сегмент (label) подчиняется отдельным правилам:

  • длина от 1 до 63 символов;
  • отсутствие запрещённых символов;
  • невозможность полного числового совпадения при некоторых настройках;
  • запрет на двойные дефисы в определённых позициях (в зависимости от IDN-режима).

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

api.service.example.com

Разбиение:

  • api — поддомен;
  • service — поддомен второго уровня;
  • example — домен второго уровня;
  • com — домен верхнего уровня.

Проверка доменов верхнего уровня

Особое внимание уделяется TLD (Top-Level Domain). Validator.js сверяет последний сегмент с допустимыми правилами:

  • наличие минимум одной буквы при стандартной конфигурации;
  • соблюдение длины;
  • соответствие международному списку TLD (в зависимости от версии библиотеки).

При включённой строгой проверке:

validator.isFQDN('example.c', { require_tld: true });

Результат будет false, так как однобуквенные TLD считаются недопустимыми в большинстве сценариев.


Поддомены и многослойная структура

Поддерживается неограниченная вложенность поддоменов при условии соблюдения лимитов DNS:

  • максимальная длина полного доменного имени — 253 символа;
  • каждый сегмент ограничен 63 символами.

Пример глубокой структуры:

a.b.c.d.example.com

Validator.js не ограничивает количество уровней, если соблюдены синтаксические правила.


Международные домены (IDN)

Современные доменные имена могут содержать символы Unicode. Для их поддержки используется преобразование в Punycode.

Пример:

münchen.de

В Punycode-форме:

xn--mnchen-3ya.de

Validator.js выполняет проверку через нормализацию, предполагая либо уже преобразованный формат, либо внутреннюю обработку IDN-строк.

Особенности проверки:

  • Unicode-домены должны быть корректно закодированы;
  • недопустимы смешанные схемы частичного Punycode и Unicode в одном сегменте;
  • правила длины применяются после кодирования.

Использование wildcard-доменов

Wildcard-формат применяется в сертификатах и маршрутизации:

*.example.com

При включённой опции allow_wildcard проверка допускает:

  • наличие * только в начале;
  • обязательную точку после wildcard;
  • запрет на множественные wildcard-сегменты.

Пример:

validator.isFQDN('*.example.com', {
  allow_wildcard: true
});

Частые ошибки валидации

При работе с доменными именами часто встречаются типовые нарушения формата:

  • двойные точки: example..com;
  • недопустимые символы: exa!mple.com;
  • дефис в начале или конце сегмента: -example.com;
  • превышение длины сегмента;
  • отсутствие TLD при строгой проверке;
  • смешение Unicode и ASCII без преобразования.

Связь с валидацией URL

Метод isFQDN часто используется в связке с isURL, когда требуется выделение и проверка доменной части.

validator.isURL('https://example.com');

Внутренняя логика проверки URL включает анализ домена, но isFQDN применяется для изолированной валидации без протоколов, портов и путей.

Разделение ответственности:

  • isURL — проверка полного адреса;
  • isFQDN — проверка только доменной структуры.

Практические сценарии применения

Валидация доменных имен используется в различных задачах:

  • проверка пользовательского ввода в формах регистрации;
  • фильтрация конфигурационных параметров;
  • анализ DNS-записей;
  • валидация настроек API и webhook-адресов;
  • обработка данных в системах маршрутизации.

Ограничения и особенности поведения

Несмотря на универсальность, isFQDN не выполняет DNS-запросы и не подтверждает существование домена. Проверка ограничивается синтаксическим анализом.

Ключевые ограничения:

  • отсутствие проверки реального существования домена;
  • зависимость от корректности входной строки;
  • невозможность проверки актуальности TLD в реальном времени без обновления библиотеки.

Структурная проверка ориентирована исключительно на формат, а не на сетевую доступность ресурса.