From bfcb2b7d51676403d2a1fc749624ba991e96ac39 Mon Sep 17 00:00:00 2001 From: zhinushannan <1377875184@qq.com> Date: Tue, 27 Jun 2023 10:56:22 +0800 Subject: [PATCH] =?UTF-8?q?Ipv4Util=20=E6=96=B0=E5=A2=9E=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=9A=E6=A3=80=E6=B5=8B=E6=8C=87=E5=AE=9A=20IP=20=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E6=98=AF=E5=90=A6=E5=8C=B9=E9=85=8D=E9=80=9A=E9=85=8D?= =?UTF-8?q?=E7=AC=A6=20pattern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/net/Ipv4Util.java | 27 +++++++++++++++++++ .../java/cn/hutool/core/net/Ipv4UtilTest.java | 9 +++++++ 2 files changed, 36 insertions(+) diff --git a/hutool-core/src/main/java/cn/hutool/core/net/Ipv4Util.java b/hutool-core/src/main/java/cn/hutool/core/net/Ipv4Util.java index 10695b220..8e320a35c 100755 --- a/hutool-core/src/main/java/cn/hutool/core/net/Ipv4Util.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/Ipv4Util.java @@ -366,6 +366,33 @@ public class Ipv4Util { return isInnerIp; } + /** + * 检测指定 IP 地址是否匹配通配符 wildcard + * + * @param pattern 通配符,如 192.168.*.1 + * @param ipAddress 待检测的 IP 地址 + * @return 是否匹配 + */ + public static boolean matches(String pattern, String ipAddress) { + if (!Validator.isMatchRegex(PatternPool.IPV4, ipAddress)) { + return false; + } + + String[] patternSegments = pattern.split("\\."); + String[] ipSegments = ipAddress.split("\\."); + + if (patternSegments.length != ipSegments.length) { + return false; + } + + for (int i = 0; i < patternSegments.length; i++) { + if (!"*".equals(patternSegments[i]) && !patternSegments[i].equals(ipSegments[i])) { + return false; + } + } + return true; + } + //-------------------------------------------------------------------------------- Private method start /** diff --git a/hutool-core/src/test/java/cn/hutool/core/net/Ipv4UtilTest.java b/hutool-core/src/test/java/cn/hutool/core/net/Ipv4UtilTest.java index f549852db..a4a7df273 100644 --- a/hutool-core/src/test/java/cn/hutool/core/net/Ipv4UtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/net/Ipv4UtilTest.java @@ -107,6 +107,15 @@ public class Ipv4UtilTest { Assert.assertFalse("掩码位非法检验", maskBitValid); } + @Test + public void matchesTest() { + boolean matches1 = Ipv4Util.matches("127.*.*.1", "127.0.0.1"); + Assert.assertTrue("IP地址通配符匹配1", matches1); + + boolean matches2 = Ipv4Util.matches("192.168.*.1", "127.0.0.1"); + Assert.assertFalse("IP地址通配符匹配2", matches2); + } + @Test public void ipv4ToLongTest(){ long l = Ipv4Util.ipv4ToLong("127.0.0.1");