У меня есть это регулярное выражение:
^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$
Который предположил бы разобрать полную электронную почту с именем и всем, я не мог заставить его работать на PHP, пожалуйста, помогите?
Вот что я пробовал:
$test = "Joe Doe <doe@example.com>"; $emailRegex = '@^((?>[a-zA-Z\d!#$%&\'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&\'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$@'; preg_match($emailRegex, $test, $curResult); print_r($curResult);
Будь проще. Поскольку мы знаем, что мы можем использовать это, чтобы упростить почти любой адрес электронной почты :
(^[^ ]+@[^ ]+\.[^ ].+$)
Еще один шаг позволит нам получить имя тоже:
^(.*?) *(<[^ ]+@[^ ]+\.[^ ].+>)$
В PHP вам не нужно такое регулярное выражение монстра, вы можете просто использовать встроенный валидатор: http://www.php.net/manual/en/filter.examples.validation.php
Например, будет выполнено только первое echo
:
<?php $email_a = 'joe@example.com'; $email_b = 'bogus'; if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) { echo "This ($email_a) email address is considered valid."; } if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) { echo "This ($email_b) email address is considered valid."; } ?>
Пытаться,
$ emailRegex = "/([\w\s]+)\<(\w+([-+.']\w+) @ \ w + ([-.] \ w +) . \ w + ([-.] \ w + )*)/я";
Я надеюсь, что это поможет вам
Я бы не написал пользовательскую функцию, если PHP- imap_rfc822_parse_adrlist
делает именно то , что вам нужно.