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

Перевірка електронної пошти

«Правильна» перевірка електронної пошти є набагато складнішою проблемою, ніж здається: RFC 5322 - це монстр. На практиці ми вибираємо досить хороший шаблон, який приймає типові випадки і відкидає явно неправильні.

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

Що він приймає: 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 дозволяє).
  • Домени з символами Unicode (\u00fcber@m\u00fcnchen.de).
  • Дуже довгі TLD, які не проходять \w (наприклад, інтернаціоналізовані).

Якщо вони вам потрібні, розширте клас до \p{L} за допомогою прапора u або делегуйте на спеціалізована бібліотека.

Компроміси та найкращі методи перевірки електронної пошти

Жоден регулярний вираз не може гарантувати, що електронна адреса дійсно існує. Надто складні шаблони погіршують продуктивність і виключають незвичні, але дійсні домени. Краще використовувати простий шаблон перевірки, щоб відхилити очевидні помилки та надіслати код підтвердження.

Спробуйте

вправи#regex.m8.l1.e1
Спроби: 0Завантаження…

Розпізнавайте кожен електронний лист у тексті. Використовуйте простий шаблон: літери/цифри/крапки перед @, домен із принаймні однією крапкою.

Завантаження редактора…
Показати підказку

Розширте локальну частину до [\\w.+-]+ і домен до [\\w-]+\\.[\\w.-]+, щоб приймати кілька доменів верхнього рівня.

Рішення доступне після 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 спроб