2012-07-25 102 views
1

好吧,所以重新閱讀了我以前的帖子後,在這個問題上尋求幫助,我發現我並沒有完全清楚我正在嘗試做什麼,也沒有指出爲什麼。我有一個網站,我正忙於發展,可能會顯示人們留下他們的電話號碼(即使這是愚蠢的)的消息,我需要負責任,並確保這應該是數字被掩蓋的情況。首先,我需要搜索存儲在變量$ messagetext中的消息文本,然後我需要使用preg_replace()函數來屏蔽部分數字,以便不清楚數字是什麼,以便有人留言並且他們的號碼是「07921234567」,它會在消息上顯示爲「07 ** 12 * 45 **」。這將如何完成?我只想找出我用來搜索整個號碼(英國號碼)的函數,它可以開始+44或07,以及preg_replace()函數中的REGEX是我所有的:preg_replace掩蓋部分的電話號碼

$extractednum = preg_replace("/[0-9]/","*",$extractednum); 
echo ($extractednum); 

所有這些都會替換整個數字。我不想這樣做的原因是我還有另一個網站正在處理社交網絡隱私問題,我需要掩蓋部分電話號碼,這些電話號碼是爲我的例子檢索的。

希望這更清楚,如果有人能幫我一些代碼,那將是很棒的!

任何感謝!

+1

如果用戶將他們的號碼轉換爲Zero792One234Five67? – 2012-07-25 14:14:47

+1

@MarcB:我認爲他正在努力盡可能負責掩蓋數字,但如果用戶試圖繞過過濾器,那麼可能無法做到。 – nhahtdh 2012-07-25 14:16:06

+1

爲什麼不用'*'s替換最後9位數?那麼它將始終是'07 *********'或'+ 447 *********'或'447 *********'。 – DaveRandom 2012-07-25 14:17:36

回答

2

我認爲你正在尋找的正則表達式是這樣的:

(00447|\+?447|07)([0-9]{9}) 

要屏蔽的電話號碼,你需要一個定製的回調與preg_replace_callback(),像這樣:

$extractednum = preg_replace_callback("/(00447|\+?447|07)([0-9]{9})/", function($matches) { 
    // This will return the number unmodified 
    // return $matches[1] . $matches[2]; 
    // Instead, set whichever characters you want to be "*" like this: 
    $matches[2][0] = $matches[2][1] = $matches[2][4] = $matches[2][7] = $matches[2][8] = "*"; 
    return $matches[1] . $matches[2]; 
} , $extractednum); 

可以看到它在the demo工作。例如,輸入07921234567產生07**12*45**作爲輸出。

+0

我會寫第一組爲'(00447 | \ +?447 | 07)'將英國手機號碼的所有可能的合法表達都考慮在內 – DaveRandom 2012-07-25 14:20:01

+0

@Dave - 感謝您的提示 - 我將修改後的正則表達式添加到代碼中。我還創建了一個新的演示。 – nickb 2012-07-25 14:22:41

0

我不確定在有效的英國電話號碼中有多少個號碼。假設有11個數字:

preg_replace(/(\d{2})\d{2}(\d{2})\d(\d{2})\d{2}/, "$1**$2*$3**"); 

這不正是一個很好的解決方案,因爲我猜有可能是不同長度的電話號碼,人們可以把空格的數量爲視覺的目的。

0
<?PHP 
function maskTelephoneNumber($phonenumber, $trim, $maskCharacter) 
{ 
$suffixNumber = substr($phonenumber, strlen($phonenumber)-$trim,$trim); 
$prefixNumber = substr($phonenumber, 0, -$trim); 

for ($x = 0; $x < strlen($prefixNumber); $x++): 
    $str.= (is_numeric($prefixNumber[$x]))? str_replace($prefixNumber[$x], $maskCharacter, $prefixNumber[$x]) : $prefixNumber[$x]; 
endfor; 

return $str.$suffixNumber;  
} 

$trim = 4; 
$maskCharacter='*'; 
$phonenumber = '555-666-7777'; 

echo maskTelephoneNumber($phonenumber,$trim, $maskCharacter);