Проверка корректности email с помощью regex: все типы

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Python
Скопировать код
import re

# Регулярное выражение, составленное в MATLAB
pattern = re.compile(r"^\S+@\S+\.\S+$")

# Проводим проверку электронного адреса
is_valid = pattern.match("user@example.com") 
print(is_valid is not None)  # Вернёт "True", если адрес действителен, и "False" в противном случае

Модуль re и функция compile применяются для создания регулярного выражения, подходящего для распознавания стандартных форматов электронных адресов. Мы проверяем соответствие строки user@example.com данному шаблону. Значение True означает, что адрес прошел проверку, а False — что он некорректен.

Кинга Идем в IT: пошаговый план для смены профессии

Искусство валидации электронной почты

Полноценная проверка электронной почты требует больше, чем простое сопоставление с регулярным выражением. Важно учитывать синтаксис, проверять существование домена, проанализировать MX-записи и доступность SMTP-сервера. Такая валидация подтверждает правильность формата и возможность доставки письма.

Разбор и использование регулярных выражений

Чтобы подтвердить соответствие электронного адреса стандартам RFC-822, можно использовать метод email.utils.parseaddr(). Он позволяет выделить адрес из строки. Для более детальной проверки стоит обратиться к регулярным выражениям, адаптированным к вариативности символов и форматов:

Python
Скопировать код
import re
from email.utils import parseaddr

email_regex = re.compile((r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"))

address = "user@example.com"
is_valid = email_regex.fullmatch(address) 
parsed_email = parseaddr(address)[1] 
print(is_valid is not None and parsed_email == address)  # Возвращает True, если адрес полностью соответствует шаблону

Таким образом, происходит не только проверка корректности синтаксиса, но и анализ адреса согласно стандартам. Функция re.fullmatch() гарантирует полное совпадение всей строки с шаблоном.

Проверка доменов и валидация MX-записей

Для подтверждения реальности домена важно убедиться в его существовании и в присутствии MX-записей для соответствующего домена. Подключите библиотеки dnspython и validate_email для проверки MX-записей:

Python
Скопировать код
from validate_email import validate_email
import dns.resolver

email = "user@example.com"
has_mx_record = validate_email(email, check_mx=True) 
resolvable_domain = dns.resolver.resolve(email.split('@')[1], 'MX') is not None  

print(has_mx_record and resolvable_domain)  # Возвращает "True", если электронный адрес имеет MX-записи и домен разрешим.

Проверка MX-записей позволяет убедиться, что почтовая служба домена активна и способна обрабатывать электронную почту.

Проверка доставляемости – заключительный этап

Для надёжной валидации адреса электронной почты крайне важно провести тестирование SMTP-сервера. Здесь на помощь придёт библиотека validate_email с опцией verify=True, которая проверяет, актуален ли почтовый ящик.

Python
Скопировать код
# Проверка существования SMTP-ящика
is_deliverable = validate_email(email, verify=True)
print(is_deliverable)  # Вернёт "True" если почтовый ящик подтверждён как доставляемый

Визуализация

Markdown
Скопировать код
Строим укрепление для проверки электронной почты 🏰

Ров синтаксической проверки: 🌊 Отвечает ли формат стандарту (user@domain)?
Мостик проверки домена: 🌉 Есть ли у него основание (существует ли домен)?
Башни MX-записей: 🏹 Указывают ли они на гавань (существуют ли MX-записи для почтовых серверов)?
Стены регулярных выражений: 🏰 Сможет ли корабль причалить в наш порт (соответствует ли адрес шаблону)?
Тронный зал валидации: 👑 Королевская печать — можно ли доставить письмо (действителен ли электронный адрес)?

Если все эти условия соблюдены, можно с уверенностью сказать, что электронные адреса готовы к использованию.

Практические методы и рекомендации

Для детальной настройки процесса валидации следует учитывать возможные опечатки, варианты доменов и другие нестандартные ситуации, чтобы улучшить точность проверки.

Обнаружение опечаток

Включение функции проверки на опечатки помогает предлагать коррективы и устраняет ошибки, возникающие из-за неправильно введённых доменных имен. Пример реализации этого подхода:

Python
Скопировать код
known_domains = ["gmail.com", "yahoo.com", "hotmail.com"]  # Домены, которые проверяются
suggestions = {}

email_parts = email.split("@")
for domain in known_domains:
    if email_parts[1].closely_matches(domain):
        suggestions[email] = domain  # Предлагаем исправление

Учет поддоменов

Многие компании используют поддомены для электронной корреспонденции. Добавление поддоменов в регулярное выражение поможет повысить точность валидации:

Python
Скопировать код
# Регулярное выражение, распознающее поддомены
subdomain_email_regex = re.compile(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.\w+$")

is_valid_with_subdomain = subdomain_email_regex.fullmatch("user@mail.example.co.uk")
print(is_valid_with_subdomain is not None)  # Подтвердит корректность регулярного выражения при учёте поддоменов

Применение библиотек валидации

Библиотекиут, такие как py3-validate-email, в полной мере соответствуют стандартам RFC 2822, и предоставляют универсальные инструменты для валидации, адаптируемые под изменчивость стандартов электронной почты.

Полезные материалы

  1. Как проверить, действителен ли адрес электронной почты? – Stack Overflow — Ознакомьтесь с предложенными решениями и обсуждениями по теме проверки электронных адресов.
  2. Регулярное выражение для электронной почты с эффективностью 99.99%. — Изучите регулярное выражение для проверки электронных адресов.
  3. email.utils: Различные утилиты — Документация Python 3.12.2 — Полезная документация модуля email.utils в Python.
  4. re — Операции с регулярными выражениями — Документация Python 3.12.2 — Документация по работе с регулярными выражениями в Python.
  5. validate_email · PyPI — Библиотека PyPI для валидации электронной почты.
  6. Python re Module – Руководство по регулярным выражениям — Уроки и примеры по освоению регулярных выражений в Python.
  7. Как работает электронная почта | HowStuffWorks — Понимание основ работы электронной почты поможет лучше освоить её валидацию.