Работа с доменными именами в веб-приложениях требует строгой проверки входных данных. Библиотека Validator.js предоставляет набор методов, ориентированных на синтаксическую и семантическую валидацию строк, представляющих домены и FQDN (Fully Qualified Domain Name).
Два ключевых метода в этой области — isDomain и isFQDN. Несмотря на схожесть задач, они решают разные уровни проверки:
Метод isDomain используется для проверки строк, которые потенциально являются доменными именами. Основной фокус — синтаксическая корректность структуры: допустимые символы, разделение точками, длина меток.
Метод не гарантирует существование домена в DNS, а проверяет только соответствие формальным правилам.
isDomain(str [, options])
str — строка для проверкиoptions — объект конфигурации (необязательный)Метод учитывает следующие ограничения:
Validator.js позволяет тонко настраивать поведение проверки:
{ require_tld: true }
Если включено, домен обязан содержать TLD (например,
.com, .org).
Примеры:
example → невалиденexample.com → валиден{ allow_underscores: true }
Разрешает символ _ в метках домена.
Используется в legacy-системах:
my_domain.example.com → валиден при включённой
опции{ allow_trailing_dot: true }
Разрешает завершающую точку, характерную для FQDN в DNS-записях:
example.com. → валиден{ allow_numeric_tld: true }
Позволяет числовые TLD, хотя в реальном DNS это редкий и спорный случай:
example.123 → валиден при включенииvalidator.isDomain('example.com'); // true
validator.isDomain('sub.example.com'); // true
validator.isDomain('-example.com'); // false
validator.isDomain('example'); // true или false (зависит от require_tld)
С опциями:
validator.isDomain('example', { require_tld: true }); // false
validator.isDomain('example', { require_tld: false }); // true
validator.isDomain('my_domain.com', { allow_underscores: true }); // true
Метод не проверяет:
Метод isFQDN предназначен для проверки полностью квалифицированных доменных имён. Это более строгая проверка по сравнению с isDomain.
FQDN подразумевает:
isFQDN(str [, options])
str — проверяемая строкаoptions — объект настроекМетод учитывает следующие требования:
{ require_tld: true }
Обязывает наличие зоны верхнего уровня.
Примеры:
example.com → валиденlocalhost → невалиден{ allow_underscores: true }
Разрешает символ _:
my_host.example.com → валиден{ allow_trailing_dot: true }
Поддержка полного DNS-формата:
example.com. → валиден{ allow_numeric_tld: true }
Разрешает числовые TLD:
example.123 → валиден при включении{ allow_wildcard: true }
Поддержка wildcard-доменов:
*.example.com → валиденИспользуется в сертификатах TLS и конфигурациях серверов.
validator.isFQDN('example.com'); // true
validator.isFQDN('sub.example.com'); // true
validator.isFQDN('example'); // false (по умолчанию)
validator.isFQDN('example.com.'); // true (с allow_trailing_dot)
С расширенными настройками:
validator.isFQDN('*.example.com', { allow_wildcard: true }); // true
validator.isFQDN('my_host.example.com', { allow_underscores: true }); // true
require_tld: false)allow_wildcardisDomain применяется в:
isFQDN применяется в:
Оба метода могут работать с интернационализированными доменами (IDN), но поведение зависит от окружения и версии Validator.js.
Примеры:
пример.рфmünchen.deПри необходимости используется Punycode-представление:
xn--e1afmkfd.xn--p1aiМетоды не предназначены для проверки URL:
validator.isFQDN('https://example.com'); // false
Без явного указания опций возможны неожиданные результаты:
validator.isDomain('localhost'); // может вернуть true
Методы не выполняют сетевую проверку:
validator.isFQDN('nonexistent.example.com'); // может вернуть true
if (validator.isDomain(input, { require_tld: true })) {
// принятие домена
}
if (validator.isFQDN(hostname, { allow_wildcard: true })) {
// использование в TLS или routing
}
const valid = validator.isFQDN(domain, {
require_tld: true,
allow_underscores: false
});
DNS ограничивает:
Validator.js учитывает эти ограничения при строгих режимах.
Разрешены:
-)Запрещены:
@, #,
%)Недопустимо:
-example.comexample-.comПри одновременном использовании опций поведение становится суммарным:
validator.isFQDN('my_host.example.com', {
require_tld: true,
allow_underscores: true,
allow_trailing_dot: true
});
В этом случае:
Методы часто комбинируются:
isURL — для проверки URL целикомisIP — для IP-адресов вместо доменовnormalizeEmail — в связке с доменными частями
emailПример:
validator.isEmail(email) && validator.isFQDN(domain);
Если передано не строковое значение:
false (в зависимости от версии и
метода вызова)Примеры некорректных входов:
nullundefinedValidator.js использует: