PHP - preg_match_all - свободный шаблон совпадения электронной почты, который допускает пробелы и двойные @ - PullRequest
1 голос
/ 18 января 2012

Я просматриваю файлы и данные нашего старого сайта, на которые в течение 10 лет поступают электронные письма и переписка наших членов.

Я извлекаю все адреса электронной почты (и испорченные записи электронной почты) и добавляю их на наши новые сайты. Db.

Это была попытка новичка cms, без проверки и подтверждения ошибок.

Итак, у меня проблемы с сопоставлением писем с пробелами и двойным @.

джем @ спа ces1.com

jam @ spac es2.com

варенье @@ doubleats.org

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

Вот мой текущий «рабочий» код:

$pattern1= '([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)';
$pattern2='\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b';
$pattern="/$pattern1|$pattern2/i";
$isago = preg_match_all($pattern,$text,$matches);
    if ($isago) {.......

Мне нужен другой шаблон, который позволил бы использовать три приведенных выше примера электронной почты в качестве адресов электронной почты. (фактическая проверка происходит позже)

Кроме того, есть ли другие шаблоны, которые я мог бы использовать, которые позволили бы мне распознать возможные электронные письма в файлах?

Спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 18 января 2012

В третьем случае вы можете изменить @ на @{1,2}. Для первого и второго вы можете добавить пробел в вашем регулярном выражении pattern1:

$pattern1= '([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@{1,2}([ ]+|)([ a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)';
$pattern2='\b[A-Z0-9._%+-]+@{1,2}[A-Z0-9.-]+\.[A-Z]{2,4}\b';
0 голосов
/ 01 февраля 2013

Для общего назначения вы должны использовать что-то вроде этого:

/[A-Za-z0-9\._]+@[A-Za-z0-9\._]+\.[A-Za-z0-9\._]+/i

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

0 голосов
/ 18 января 2012

Этот ответ похож на шутку, которую я знаю ... но как насчет этого RegEx:

/[\S ]+@[\S ]+\.[\S ]+/i

Это работает для вас?Я проверил это в документе и сопоставил три письма.

...