[英]How to remove email addresses and links from a string in PHP?
如何從字符串中刪除所有電子郵件地址和鏈接並將它們替換為“[removed]”
您可以使用 preg_replace 來做到這一點。
對於電子郵件:
$pattern = "/[^@\s]*@[^@\s]*\.[^@\s]*/";
$replacement = "[removed]";
preg_replace($pattern, $replacement, $string);
對於網址:
$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
信用到期:電子郵件正則表達式取自 preg_match 聯機幫助頁,URL 正則表達式取自: http : //www.weberdev.com/get_example-4227.html
嘗試這個:
$patterns = array('<[\w.]+@[\w.]+>', '<\w{3,6}:(?:(?://)|(?:\\\\))[^\s]+>');
$matches = array('[email removed]', '[link removed]');
$newString = preg_replace($patterns, $matches, $stringToBeMatched);
注意:您可以將一組模式和匹配項傳遞給 preg_replace 而不是運行它兩次。
我要投票的答案已被刪除。 它鏈接到 Linux Journal 文章Validate an E-Mail Address with PHP,正確的方法指出幾乎每個人提出的電子郵件正則表達式都有什么問題。
電子郵件地址的有效形式范圍比大多數人想象的要廣泛得多。
電子郵件的第一個本地部分中有很多有效字符(請參閱電子郵件地址中允許使用哪些字符? ),因此這些行將替換所有有效的電子郵件地址:
<?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);
這將涵蓋大多數有效的電子郵件地址,請注意:僅刪除所有有效的電子郵件地址要復雜一些(請參閱如何使用正則表達式驗證電子郵件地址? )
電子郵件模式(10x 到@bromelio)
"/[^@\s]*@[^@\s\.]*\.[^@\s\.,!?]*/"
網址模式
"#((?:https?|ftp)://\S+[[:alnum:]]/?)#si"
我的回答是對Josiah's code
略有改進。 只是想將兩個代碼段合並為一個,因為preg_replace()
允許模式可以作為string
或array
傳遞。
$patterns = array();
$patterns[0] = "/[^@\s]*@[^@\s]*\.[^@\s]*/"; //removes email
$patterns[1] = "/[a-zA-Z]*[:\/\/]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-
_]+/i"; //removes any link
$replace = "[removed]";
$string = "Follow the link below https://stackoverlow.com/testing/preg-
match-replace-in-php or email me a sample code in my email
test@mail.com";
preg_replace($pattern,s $replacement, $string);
如果您想在刪除鏈接或電子郵件時使用不同的替換文本,例如刪除郵件時指定[email has been removed]
和[link has been removed]
您可以擴展上述部分$replacement
上的代碼更是如此,如下所示
$replacements = array();
//replacementmessage for mails
$replacements[0] = "[Email has been removed]";
//replacementmessage for links
$replacements[1] = "[Link has been removed]";
代碼的所有其他部分都保持不變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.