首页 > 解决方案 > 在 PHP 中同时屏蔽 IPv4 和 IPv6

问题描述

我试图能够在 PHP 中同时屏蔽 IPv4 和 IPv6 字符串的最后一部分。我的意思是,192.168.0.1 或 192.168.0.255 都会显示 192.168.0.XXX 和 2001:0db8:85a3:0000:0000:8a2e:0370:7334 会变成 2001:0db8:85a3:0000:0000: 8a2e:0370:XXX

这在PHP中可能吗?我知道使用 IPv4 我可以做到这一点:

preg_replace('/([0-9]+\\.[0-9]+\\.[0-9]+)\\.[0-9]+/', '\\1.xxx', $text);

有了这个,我可以专门屏蔽 IPv4,但因为我对 Regex 不太熟悉,所以我很难弄清楚这一点。

标签: phpregexip

解决方案


用于|创建具有备选方案的模式。

preg_replace('/((?:\d{1,3}\\.){3}|(?:[\da-f]{1,4}:){7})(?:[\da-f]{1,4}|\d{1,3})/', '$1xxx', $text);

请注意,这不适用于缩写的 IPv6 地址,因为它专门检查 8 个十六进制数字块。处理这个问题留给读者作为练习。


推荐阅读