Как удалить адреса электронной почты и ссылки из строки в PHP? - PullRequest
1 голос
/ 21 июля 2010

Как удалить все адреса электронной почты и ссылки из строки и заменить их на «[удалено]»

Ответы [ 5 ]

17 голосов
/ 21 июля 2010

Вы можете использовать preg_replace, чтобы сделать это.

для электронной почты:

$pattern = "/[^@\s]*@[^@\s]*\.[^@\s]*/";
$replacement = "[removed]";
preg_replace($pattern, $replacement, $string);

для URL:

$pattern = "/[a-zA-Z]*[:\/\/]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-_]+/i";
$replacement = "[removed]";
preg_replace($pattern, $replacement, $string);

Ресурсы

Ввод PHP вручную: http://php.net/manual/en/function.preg-replace.php

Кредит, причитающийся за кредит: регулярное выражение электронной почты взято с man-страницы preg_match и регулярное выражение URL-адреса от: http://www.weberdev.com/get_example-4227.html

2 голосов
/ 21 июля 2010

Попробуйте это:

$patterns = array('<[\w.]+@[\w.]+>', '<\w{3,6}:(?:(?://)|(?:\\\\))[^\s]+>');
$matches = array('[email removed]', '[link removed]');
$newString = preg_replace($patterns, $matches, $stringToBeMatched);

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

1 голос
/ 22 июля 2010

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

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

0 голосов
/ 07 мая 2019

В первой локальной части письма допустимо много символов (см. Какие символы разрешены в адресе электронной почты? ), поэтому эти строки заменят все действительные адреса электронной почты:

<?php
$c='a-zA-Z-_0-9'; // allowed characters in domainpart
$la=preg_quote('!#$%&\'*+-/=?^_`{|}~', "/"); // additional allowed in first localpart
$email="[$c$la][$c$la\.]*[^.]@[$c]+\.[$c]+";
$t = preg_replace("/\b($email)\b/", '[removed]', $t);
// or with a link:
$t = preg_replace("/\b($email)\b/", '<a href="mailto:\1">\1</a>', $t);

# replace urls:
a='A-Za-z0-9\-_';
$t = preg_replace("/[htpsftp]+[:\/\/]+[$a]+\.+[$a\.\/%&=\?]+/i", '[removed]', $t);

Это будет охватывать большинство действительных адресов электронной почты, будьте информированы: удаление действительно только всех действительных адресов электронной почты немного сложнее (см. Как проверить адрес электронной почты с помощью регулярного выражения? )

0 голосов
/ 21 августа 2014

Мой ответ - это вариант /[^@\s]*@[^@\s]*\.[^@\s]*/ Джозии для электронных писем, который отлично работает, но также соответствует любой пунктуации после самого адреса электронной почты: demo 1

Адаптируйте регулярное выражение следующим образом /[^@\s]*@[^@\s\.]*\.[^@\s\.,!?]*/, чтобы исключить . , ! и ?: demo 2

...