簡體   English   中英

如何從 PHP 中的字符串中刪除電子郵件地址和鏈接?

[英]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 而不是運行它兩次。

我的回答是 Josiah 的/[^@\\s]*@[^@\\s]*\\.[^@\\s]*/的變體,用於電子郵件,它工作正常,但也匹配電子郵件地址本身之后的任何標點:演示 1

調整正則表達式如下/[^@\\s]*@[^@\\s\\.]*\\.[^@\\s\\.,!?]*/以排除. , ! ? :演示 2

我要投票的答案已被刪除。 它鏈接到 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()允許模式可以作為stringarray傳遞。

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM