Regex для доменного имени

Используйте /^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/, чтобы проверить, что вся строка является корректным доменным именем. Каждый пример ниже проверен по шаблону, а открыть его в Regex Tester можно с уже загруженными образцами.

Обновлено

/^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/
Открыть в Regex Tester
ВводРезультат
example.com✓ Совпадение
sub.example.co.uk✓ Совпадение
my-site.dev✓ Совпадение
-example.com✗ Нет совпадения
example✗ Нет совпадения
example-.com✗ Нет совпадения
https://example.com✗ Нет совпадения

Как работает шаблон

ЧастьЗначение
[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?Метка из 1–63 символов, которая не начинается и не заканчивается дефисом
\.Точка после каждой метки
(?:…)+Одна или несколько меток (поддоменов)
[A-Za-z]{2,}$Домен верхнего уровня

Примеры кода

JavaScript

const re = /^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}', value))

PHP

preg_match('/^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/', $value) === 1;

Примечания и ограничения

Интернационализированные домены сначала нужно перевести в их форму punycode (xn--…). Проверить DNS-записи домена можно с помощью DNS Lookup.

Часто задаваемые вопросы

Какое регулярное выражение используется для доменного имени?
/^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/ — оно проверяет всю строку. Что делает каждая часть, см. в таблице выше.
Какие примеры совпадают?
Из проверенных примеров совпадают: example.com, sub.example.co.uk, my-site.dev. Остальные — нет.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester» — шаблон, флаги и примеры текста загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.