2012-07-25 81 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);