preg_replace来屏蔽电话号码的部分内容


preg_replace to mask parts of a phone number

好吧,所以在重读了我之前的帖子后,我发现我没有明确地说明我想做什么,也没有指出原因。我有一个网站正在忙于开发,它可能会显示人们留下电话号码的信息(尽管这很愚蠢),我需要负责任,确保在这种情况下,这些号码被屏蔽。首先,我需要搜索存储在变量$messagetext中的消息文本,然后我需要使用preg_replace()函数来屏蔽部分数字,这样就不清楚数字是什么,所以如果有人留下消息,而他们的号码是"07921234567",那么消息上会显示为"07**12*45**"。如何做到这一点?我只想知道我会用什么函数来搜索整个号码(英国号码),它可能以+44或07开头,以及preg_replace()函数中的REGEX,因为我只有:

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

所有这些只是替换整个数字。我不想这样做的原因是,我还有另一个网站,我正在开发社交网络隐私,我需要屏蔽我为我的例子检索到的部分电话号码。

希望这更清楚,如果有人能帮我写一些代码,那就太好了!

任何东西都值得赞赏!

我认为您要查找的正则表达式是:

(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);

你可以在演示中看到它的工作原理。例如,07921234567的输入产生07**12*45**作为输出。

我不确定一个有效的英国电话号码中有多少号码。假设有11个数字:

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

这并不是一个好的解决方案,因为我猜可能会有不同长度的电话号码,人们可以在号码中添加空格以达到视觉目的。

<?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);