PHP поиск строки для адреса электронной почты - PullRequest
5 голосов
/ 12 января 2010

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

Типичное выражение vaildator электронной почты:

eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email);

Однако как мне искать, если это в строке, например, вернуть адрес электронной почты в строке:

«Привет, меня зовут Джо, со мной можно связаться по адресу joe@mysite.com. Я также в Твиттере».

Я немного озадачен, я знаю, что могу искать, существует ли он вообще с \ b вокруг него, но как мне вернуть то, что найдено.

Спасибо.

Ответы [ 3 ]

9 голосов
/ 12 января 2010

Вы можете использовать preg_match(), что приведет к выводу его в массив для использования.

$content = "Hi my name is Joe, I can be contacted at joe@mysite.com. I am also on Twitter.";
preg_match("/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/i", $content, $matches);

print $matches[0]; // joe@mysite.com
4 голосов
/ 12 января 2010

добавить $ regs в качестве последнего аргумента:

eregi("...", $email, $regs);
0 голосов
/ 12 января 2010

Лучший PCRE для извлечения ADDR_SPEC:

 /[a-z0-9\._%+!$&*=^|~#%'`?{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,6})/

Но если вы действительно хотите извлечь RFC 2822, вам нужно что-то вроде:

 /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/

C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...