Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中从字符串中删除电子邮件地址和链接?_Php_String_Email_Hyperlink - Fatal编程技术网

如何在PHP中从字符串中删除电子邮件地址和链接?

如何在PHP中从字符串中删除电子邮件地址和链接?,php,string,email,hyperlink,Php,String,Email,Hyperlink,如何从字符串中删除所有电子邮件地址和链接,并将其替换为“[已删除]”您可以使用preg\u 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\.

如何从字符串中删除所有电子邮件地址和链接,并将其替换为“[已删除]”

您可以使用preg\u 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手动输入:

信用到期时的信用:从preg_match手册页获取电子邮件正则表达式,从以下地址获取URL正则表达式:

尝试以下操作:

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

注意:您可以将一组模式和匹配项传递到preg_replace中,而不必运行两次。

我要向上投票的答案已被删除。它链接到Linux杂志的一篇文章,该文章指出了几乎每个人提出的电子邮件regex都有什么问题


电子邮件地址的有效形式的范围比大多数人想象的要广泛得多。

我的答案是约西亚对电子邮件的
/[^@\s]*@[^@\s]*\.[^@\s]*/
的一种变体,它可以很好地工作,但也匹配电子邮件地址本身之后的任何提示:


调整正则表达式如下
/[^@\s]*@[^@\s\.]*\.[^@\s\,!?]*/
以排除

电子邮件的第一个本地部分中有许多有效字符(请参阅),因此这些行将替换所有有效的电子邮件地址:

<?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);
电子邮件模式(10倍于@bromelio)

Url的模式

"#((?:https?|ftp)://\S+[[:alnum:]]/?)#si"

你能发一个小的文本样本吗?这只是我的一个随机文本。没什么特别的,只是一些不正确的电子邮件地址和链接。电子邮件的正则表达式不会删除有效电子邮件地址中不允许的标点符号,如:?#$%。正则表达式必须删除除alphanumeric和period(.)之外的所有字符。必须删除所有其他内容(可能还允许使用某些其他字符,但不是全部!)。感谢它的工作。您能建议删除10位手机号码的模式吗?工作不正常。需要改进。www.site.com不是一个链接。你也想删除URL吗?是的,它不是在删除www.site.com:-(要删除www.site.com,我们可以使用模式
$pattern=“/[a-zA-Z]*[:\/\/\]*[a-zA-z0-9\-\+.+[a-zA-z0-9\/%&=\?\-\+/i];
preg\u replace(“!\s*.\s*!”),“,”进行消毒也很有用,“,”今天访问

"#((?:https?|ftp)://\S+[[:alnum:]]/?)#si"