Перейти к основному содержимому
Модуль 8 · Урок 1 из 429/32 в курсе~12 min
Уроки модуля (1/4)

Проверка электронной почты

«Правильная» проверка электронного письма — гораздо более сложная проблема, чем кажется: RFC 5322 — монстр. На практике мы выбираем достаточно хороший шаблон, который принимает общие случаи и отвергает явно неправильные.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- локальная часть: буквы, цифры, _, ., +, -.
  • @ -- разделитель.
  • [\w-]+(?:\.[\w-]+)+ — домен + хотя бы один TLD, разделенный ..

Что он принимает: mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.

Что он отклоняет: mario@, @example.com, mario@example (без TLD), пробелы.

Компромиссы

Приведенный выше шаблон не принимает:

— Строки в кавычках "strange (things)"@example.com (RFC допускает это).

  • Домены с символами Юникода (\u00fcber@m\u00fcnchen.de). – Очень длинные TLD, не соответствующие \w (например, интернационализированные).

Если они вам нужны, расширите класс до \p{L} с помощью флага u или делегируйте его специализированная библиотека.

Компромиссы и лучшие практики проверки электронной почты

Никакое регулярное выражение не может гарантировать, что адрес электронной почты действительно существует. Чрезмерно сложные шаблоны снижают производительность и исключают необычные, но действительные домены. Лучше использовать простой шаблон проверки, чтобы отклонить очевидные опечатки и отправить код проверки.

Попробуйте это

Упражнение#regex.m8.l1.e1
Попыток: 0Загрузка…

Распознавайте каждое письмо в тексте. Используйте простой шаблон: буквы/цифры/точки перед @, домен хотя бы с одной точкой.

Загрузка редактора…
Показать подсказку

Расширьте локальную часть до [\\w.+-]+ и домен до [\\w-]+\\.[\\w.-]+, чтобы принять несколько TLD.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#regex.m8.l1.e2
Попыток: 0Загрузка…

Захватывайте домен (часть после @) каждого электронного письма как именованную группу dominio.

Загрузка редактора…
Показать подсказку

Оберните доменную часть в именованную группу: (?<dominio>[\\w.-]+).

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#regex.m8.l1.e3
Попыток: 0Загрузка…

Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.

Загрузка редактора…
Показать подсказку

Используйте положительный просмотр назад (?<=@) перед классом символов домена.

Решение доступно после 3 попыток