Php 如何使用'preg_replace()'隐藏部分ip地址和/或主机名?

Php 如何使用'preg_replace()'隐藏部分ip地址和/或主机名?,php,preg-replace,Php,Preg Replace,我需要制作这些字符串 192.168.0.1和some.subdomain.domain.com 变成 192.168.0.**和***.subdomain.domain.com 在一句话中使用preg\u replace()函数 可能吗 我试过了 preg_replace('/([0123456789]$)|(^(.[a-z][^\.]])/,'***',$a) 使用$a作为some.subdomain.domain.com和192.168.0.1 但我的模式似乎有问题 (可选):是否可以用星

我需要制作这些字符串
192.168.0.1
some.subdomain.domain.com

变成
192.168.0.**
***.subdomain.domain.com

在一句话中使用
preg\u replace()
函数

可能吗

我试过了
preg_replace('/([0123456789]$)|(^(.[a-z][^\.]])/,'***',$a)

使用
$a
作为
some.subdomain.domain.com
192.168.0.1
但我的模式似乎有问题


(可选):是否可以用星号将这些部分屏蔽为被屏蔽字母/数字的准确数量,例如
127.0.0.1->***.0.0.1
10.4.8.2->***.4.8.2
,以及
sub.domain.com->***.domain.com
s.domain.com->***.domain.com

对于第一个问题,
preg_replace
可以使用数组作为第一个参数。因此,您可以尝试以下方法(目前无法测试):

对于第二个问题,我将尝试类似的方法(尚未测试):

如果你不知道,我明天会测试。

preg_replace()
有点慢,有更好的方法,如
explode()
如果你想隐藏ip的最后一部分,请执行以下操作:

<?php



$ip = "192.168.0.1";

$ip_items = explode('.', $ip);

$filtered_ip = ''; //The var to store the filtered ip

foreach($ip_items as $item) {
  if($item == end($ip_items)) { //check if its the last part of the IP
    $ip_part = '***';
  } else {
    $ip_part = $item . '.';
  }

$filtered_ip .= $ip_part;

}

echo $filtered_ip;



?>
结果:
***.168.0.1.

编辑:对于第二个问题,您可以使用
stru length
获取长度,并使用
stru repeat
重复字符

例如:

<?php



$ip = "192.168.0.1";

$ip_items = explode('.', $ip);

$filtered_ip = ''; //The var to store the filtered ip

foreach($ip_items as $item) {
  if($item == end($ip_items)) { //check if its the last part of the IP
    $ip_part = str_repeat("*", strlen($item)) ;
  } else {
    $ip_part = $item . '.';
  }

$filtered_ip .= $ip_part;

}

echo $filtered_ip;



?>

<?php



$ip = "192.168.0.1";

$ip_items = explode('.', $ip);

$filtered_ip = ''; //The var to store the filtered ip

foreach($ip_items as $item) {
  if($item == end($ip_items)) { //check if its the last part of the IP
    $ip_part = '***';
  } else {
    $ip_part = $item . '.';
  }

$filtered_ip .= $ip_part;

}

echo $filtered_ip;



?>
<?php



$ip = "192.168.0.1";

$ip_items = explode('.', $ip);

$filtered_ip = ''; //The var to store the filtered ip

foreach($ip_items as $item) {
  if($item == $ip_items[0]) { //check if its the first part of the IP
    $ip_part = '***.'; //we added the '.' to that one because its the first item
  } else {
    $ip_part = $item . '.';
  }

$filtered_ip .= $ip_part;

}

echo $filtered_ip;



?>
<?php



$ip = "192.168.0.1";

$ip_items = explode('.', $ip);

$filtered_ip = ''; //The var to store the filtered ip

foreach($ip_items as $item) {
  if($item == end($ip_items)) { //check if its the last part of the IP
    $ip_part = str_repeat("*", strlen($item)) ;
  } else {
    $ip_part = $item . '.';
  }

$filtered_ip .= $ip_part;

}

echo $filtered_ip;



?>