如何用PHP“ preg_replace”或更短的代码隐藏特定帖子?

问题描述 投票:0回答:3

如何使用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
?>
php preg-replace preg-match-all
3个回答
1
投票

如果只需要在与特定格式匹配的字符串中将子字符串隐藏在中间,则可以使用

preg_replace('~(?:\G(?!^)|^pub-\d{5}(?=\d*$))\K\d(?=\d{5})~', '*', $string)

请参见PHP demoregex 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

0
投票

您尝试过这种方法吗?


0
投票

鉴于字符串的宽度是固定的,我可能建议在这里避免使用正则表达式,而只使用基本字符串函数:

© www.soinside.com 2019 - 2024. All rights reserved.