您尝试过这种方法吗?
如何使用PHP“ preg_replace”或较短的代码隐藏特定帖子?
我想显示指定文本的前5个和后5个字符。它总是以pub-开头。续集中有16个数字。只有数字改变。我想在中间隐藏文本。
<?php
$string = "pub-9752787982789258";
echo "pub-" . substr(explode("-", $string)[1], 0, 5) . '******' . substr(explode("-", $string)[1], 11, 5);
// RESULT: pub-97527******89258
?>
如果只需要在与特定格式匹配的字符串中将子字符串隐藏在中间,则可以使用
preg_replace('~(?:\G(?!^)|^pub-\d{5}(?=\d*$))\K\d(?=\d{5})~', '*', $string)
请参见PHP demo和regex demo。
详细信息
(?:\G(?!^)|^pub-\d{5}(?=\d*$))
-上一次成功匹配的结尾,或pub-
在字符串的开头,然后是5位数字,后跟任意0+数字,直到字符串的末尾,然后]]\K
-省略到目前为止匹配的文本\d
-匹配任意一位数字(?=\d{5})
-确保右边有五个数字。您尝试过这种方法吗?
echo substr_replace($string, '******', 9, strlen($string) -14 );
鉴于字符串的宽度是固定的,我可能建议在这里避免使用正则表达式,而只使用基本字符串函数:
$string = "pub-1885335825402893";
$output = substr($string, 0, 9) . "******" . substr($string, 15, 5);
echo $output;
pub-18853******02893
您尝试过这种方法吗?
鉴于字符串的宽度是固定的,我可能建议在这里避免使用正则表达式,而只使用基本字符串函数: