Модульні уроки (1/4)
Перевірка електронної пошти
«Правильна» перевірка електронної пошти є набагато складнішою проблемою, ніж здається: RFC 5322 - це монстр. На практиці ми вибираємо досить хороший шаблон, який приймає типові випадки і відкидає явно неправильні.
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 або делегуйте на
спеціалізована бібліотека.
Компроміси та найкращі методи перевірки електронної пошти
Жоден регулярний вираз не може гарантувати, що електронна адреса дійсно існує. Надто складні шаблони погіршують продуктивність і виключають незвичні, але дійсні домени. Краще використовувати простий шаблон перевірки, щоб відхилити очевидні помилки та надіслати код підтвердження.
Спробуйте
Розпізнавайте кожен електронний лист у тексті. Використовуйте простий шаблон: літери/цифри/крапки перед @, домен із принаймні однією крапкою.
Показати підказку
Розширте локальну частину до [\\w.+-]+ і домен до [\\w-]+\\.[\\w.-]+, щоб приймати кілька доменів верхнього рівня.
Рішення доступне після 3 спроб
Повторна вправа
Зберігайте домен (частина після @) кожного електронного листа як групу з назвою "dominio".
Показати підказку
Оберніть доменну частину в іменовану групу: (?<dominio>[\\w.-]+).
Рішення доступне після 3 спроб
Додатковий виклик
Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.
Показати підказку
Використовуйте позитивний огляд (?<=@) перед класом символів домену.
Рішення доступне після 3 спроб