2015-07-02 103 views
2

我需要让这些字符串
192.168.0.1some.subdomain.domain.com
一句话成为
192.168.0.******.subdomain.domain.com
preg_replace()功能如何使用`preg_replace()`来隐藏部分IP地址和/或主机名?

它是possibe?

我已经试过
preg_replace('/([]$)|(^(.)[a-z][^\.])/','***',$a)
$asome.subdomain.domain.com192.168.0.1 但似乎与我的模式是错误的。

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

回答

1

对于第一个问题,preg_replace可以使用数组作为第一个参数。所以,你可以尝试这样的事情(目前无法测试):

$patterns = [ 
    '/^[a-z]+/i', 
    '/[0-9]+$/' 
]; 
$newHost = preg_replace($patterns, '***', $host); 

对于第二个问题,我会尝试这样的事情(未测试尚未过):

$patterns = [ 
    '/^([a-z]*)([a-z])([a-z]*)/i', 
    '/([0-9]*)([0-9])([0-9]*)$/' 
]; 
$newHost = preg_replace($patterns, '\1*\3', $host); 

我将测试明天如果你不这样做。

1

以及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; 



?> 

结果:192.168.0.***

和如果你想过滤的其他部分的IP像第一个使用$ip_items[0]而不是end($ip_items)

例如:

<?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; 



?> 

结果:***.168.0.1.

编辑:和关于第二个问题,你可以使用str_length得到的长度和使用str_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; 



?>