2012-07-13 58 views
2

我一直希望得到這個小小的幫助,因爲它讓我有點困惑......我運行一個網站,允許用戶來回發送消息,但在收件箱中我需要隱藏電子郵件和電話號碼。在PHP中查找並替換電子郵件和電話號碼

示例:這是示例電子郵件的樣子。

嗨,我的電話是+44 5555555和電子郵件是[email protected]

我需要它是這樣的:

嗨,我的手機(手機隱藏)和電子郵件是(電子郵件隱藏)

你有什麼想法嗎?......我真的很感激!..

回答

2
$x = 'Hi, my phone is +44 5555555 and email is [email protected]'; 
$x = preg_replace('/[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}/i','(phone hidden)',$x); // extract email 
$x = preg_replace('/(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?/','(email hidden)',$x); // extract phonenumber 
echo $x; // Hi, my phone is (phone hidden) and email is (email hidden) 

工藤的爲PHONENUMBER正則表達式fatcat

+1

jack [at] jack [dot] com? – 2012-07-13 11:57:54

+0

嗨,使用該代碼,它適用於電話號碼,但不是電子郵件? – 2012-07-13 12:19:35

+0

忘記大小寫不敏感!固定 – rsplak 2012-07-13 12:23:24

1

試圖用100%的準確率要做到這一點時,用戶可以輸入各種東西是不可能的 - 你不能真正明確地說,如果一個子字符串是一個電話號碼或只是另一個號碼,或一個電子郵件地址或只是一個有效的東西。

但是,如果你想嘗試,你應該使用正則表達式。見http://php.net/manual/en/function.preg-replace.php

+1

請小心使用正則表達式來匹配電子郵件;你很容易做錯了。有關詳細信息,請參閱此答案:http://stackoverflow.com/a/201378/643309 – WilliamMayor 2012-07-13 11:57:49

0

如果我理解正確的話,用戶可以將消息發送到對方和你擔心,如果他們發送消息與它的個人信息信息可能太明顯。

我想你是在試圖從消息的預覽中刪除這些信息(但是如果你打開消息,仍然可以使用它)。

如果是這種情況,那麼你可以有一個非常草率的正則表達式去除任何看起來有點像數字或電子郵件的東西。如果您隱藏非個人信息並不重要,因爲郵件的未審查版本始終可用。

我會去與像這樣(未經):

# Take any string that contains an @ symbol and replace it with ... 
# The @ symbol must be surrounded by at least one character on both sides 
$message = preg_replace('/[^ ][email protected][^ ]+/','...',$message); # for emails 
# Take any string that contains only numbers, spaces and dashes, replace with ... 
# Can optionally have a + before it. 
$message = preg_replace('/\+?[0-9\- ]+/','...',$message); # for phone numbers 

這是要配合很多的東西,不僅僅是電子郵件和電話號碼。它也可能與我沒有想到的電子郵件和電話號碼不匹配,這是爲這些事情編寫正則表達式時遇到的問題之一。

相關問題