20 распространённых шаблонов регулярных выражений, которые должен знать каждый разработчик
20 распространённых шаблонов регулярных выражений, которые должен знать каждый разработчик
Regex решает реальные задачи: проверка ввода, извлечение данных и преобразование строк. В этом руководстве представлено 20 готовых к использованию регулярных выражений, охватывающих наиболее распространённые задачи обработки текста. Каждый шаблон включает пояснение того, что он сопоставляет.
1. Адрес электронной почты
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Локальная часть допускает буквы, цифры, точки и специальные символы. Домен допускает буквы, цифры и точки. TLD должен содержать не менее двух букв.
2. URL
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z]{2,}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)
Соответствует HTTP/HTTPS URL с необязательным www, доменным именем, TLD, путём и строкой запроса.
3. Номер телефона США
^\(?(\d{3})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})$
Соответствует форматам (555) 123-4567, 555-123-4567, 555.123.4567 и 5551234567.
4. Международный номер телефона
^\+?(\d{1,3})\s?[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{1,4}[-.\s]?\d{1,9}$
Универсальный шаблон для международных номеров с кодами стран.
5. Надёжный пароль
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
Требуется 8+ символов, одна строчная, одна заглавная, одна цифра, один специальный символ. Использует опережающие проверки (lookahead).
6. Дата (ГГГГ-ММ-ДД)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
Формат ISO 8601. Месяц 01-12, день 01-31. Не проверяет ограничения по месяцам (30 февраля пройдёт).
7. Дата (ММ/ДД/ГГГГ)
^(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])\/\d{4}$
Американский формат с косой чертой.
8. Время (ЧЧ:ММ, 24-часовой формат)
^([01]\d|2[0-3]):[0-5]\d$
Часы 00-23, минуты 00-59.
9. IPv4-адрес
^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$
Четыре октета. Для строгой проверки (0-255) замените \d{1,3} на (25[0-5]|2[0-4]\d|[01]?\d\d?).
10. IPv6-адрес
^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
Полный IPv6 с 8 группами шестнадцатеричных цифр. Не обрабатывает сокращение ::.
11. MAC-адрес
^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
Разделитель — двоеточие или дефис.
12. Шестнадцатеричный код цвета
^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
3-значный (#fff) или 6-значный (#ffffff), без учёта регистра.
13. Номер кредитной карты
^\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}$
16 цифр с необязательными разделителями. Не проверяет контрольную сумму Луна.
14. Почтовый индекс США (ZIP)
^\d{5}(-\d{4})?$
12345 или 12345-6789.
15. Имя пользователя
^[a-zA-Z0-9_]{3,16}$
3-16 символов, только буквы, цифры и подчёркивание.
16. URL Slug
^[a-z0-9-]+$
Строчные буквы, цифры и дефисы. Распространено в CMS-системах.
17. HTML-тег
<\/?[\w\s]*>|<.+[\w\s]*>
Соответствует открывающим и закрывающим тегам. Не подходит для вложенного HTML.
18. Расширение файла
\.([a-zA-Z]{2,})$
Извлекает расширение без точки.
19. Нормализация пробелов
\s+
Схлопывает несколько пробелов, табуляций или переводов строк в один.
20. Извлечение чисел
-?\d+(\.\d+)?
Целые и десятичные числа, включая отрицательные.
Советы по производительности
- Будьте конкретны — избегайте
.*, который может вызвать катастрофический возврат (catastrophic backtracking). - Используйте якоря
^и$для ограничения области поиска. - Тестируйте крайние случаи: пустые строки, длинные строки, специальные символы.
Тестируйте эти шаблоны онлайн
Используйте инструмент тестера регулярных выражений для экспериментов с этими шаблонами. Вставьте любое выражение, введите образец текста и наблюдайте за выделением совпадений в реальном времени. Тестер показывает группы захвата и помогает отлаживать шаблоны перед использованием.