Shlop
@Shlop
Full Stack Developer (PHP/Laravel/JavaScript)

Нормальное ли регулярное выражение для поиска email адресов?

Здравствуйте, подскажите пожалуйста, я составил следующее регулярное выражение:
([a-zа-яё0-9._-]+)(@{1})([a-zа-яё0-9._-]+)\.([a-zа-я]{2,3})

Задача строит следующая:
На вход программа принимает html-файл и нужно доставить все email адреса из него, подходит ли данное регулярное выражение для такой задачи или что-то стоит доработать ? Заранее благодарю за ответ.
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
begemot_sun
@begemot_sun
Программист в душе.
На самом деле если серьезно, то такого регекспа создать невозможно. Проблема в том, что нет однозначного правила для валидации email адресов. Любой адрес бла@бла.cервер может быть адресом email, а может быть еще чем-то. Например XMPP юзером (JID).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
Вот, пример, более-менее подходящей регулярки для email:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])


Но и она не покрывает всех случаев, поэтому правильный ответ - на регулярках не нужно писать писать поиск/валидатор емайл адресов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы