[英]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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.