preg_replace用于屏蔽电话号码的一部分

时间:2012-07-25 14:12:44

标签: php regex masking

好的,所以在重新阅读了我之前的帖子,在这个帖子上寻求帮助后,我发现我并没有明确说明我想要做什么,也没有指出原因。我有一个我正在忙着开发的网站,它可能会显示人们已经留下电话号码的消息(即使这是愚蠢的),我需要负责并确保这是数字被屏蔽的情况。首先,我需要搜索存储在变量$ messagetext中的消息文本,然后我需要使用preg_replace()函数来屏蔽数字的部分,这样就不清楚数字是什么,如果有人要留言和他们的号码是“07921234567”,它会在消息上显示为“07 ** 12 * 45 **”。怎么做?我想要的是找出我用来搜索整个数字(英国数字)的函数,该数字可以从+44或07开始,而preg_replace()函数中的REGEX就像我所拥有的那样:

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

所有这一切都取代了整个号码。我不想这样做的原因是我还有另一个我正在处理社交网络隐私的网站,我需要屏蔽我为我的例子检索的部分电话号码。

希望这更清楚,如果有人可以帮我解决一些非常棒的代码!

感激不尽!

3 个答案:

答案 0 :(得分: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**作为输出。

答案 1 :(得分:0)

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

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

这不是一个很好的解决方案,因为我猜测可能有不同长度的电话号码,人们可以在号码中加上空格用于视觉目的。

答案 2 :(得分: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);