常用正则表达式-IPv4地址

正则表达式之ip地址匹配(详细讲解) 从语法上看,完全正确,也达到了我们的题目要求,可是我们有没有注意到,我们日常生活中所用的ip地址每一位都是在0-255之间,但是我们上面写的表达式会匹配0-999之间的所有ip地址,如果在未来的工作中,有这样的需求,要匹配所有合法的ip地址,那么我们上面所写的正则表达式是不是就不符合要求了,这里就需要我们使用子表达式的嵌套(表达式为:((1\d{2}.)|(2[0-5]{2}.)|(\d{1,2}.)){3}((\d{1,2})|(1\d{2})|(2[0-5]{2}))),伙伴们可以一起实践一下! 阅读详情
AI摘要

本文详细介绍了IPv4地址的正则表达式规则,包括点分十进制表示法,以及如何在Java中使用正则表达式验证IPv4地址的有效性。通过实例和测试用例展示验证方法及其常见问题解析。

1. IPv4地址定义

参考百度百科

IPv4使用32位(4字节)地址,因此地址空间中只有4,294,967,296(即2的32次方)个地址。

通常使用点分十进制进行表示方法,如0.0.0.0-255.255.255.255。

2. IPv4地址的正则表达式

一个合法的IPv4地址由4组数字组成,每组数字之间以.隔开,数字的取值范围为0-255。每组数字的总结如下:

范围描述正则表达式
0-91位数字\d
10-992位数字[1-9]\d
100-199以1开头的3位数字1\d{2}
200-249以2开头,第2位是0-4的3位数字2[0-4]\d
250-25525开头,第3位是0-5的3位数字25[0-5]

所以每组数字的正则表达式为:

\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]

其中, \d和 [1-9]\d可以合并为 [1-9]?\d。再加上点号之后,加上起始和结尾的标记保证全匹配,则IPv4的完整正则表达式为:

^((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$

java代码中斜杠需要转移,则对应java代码的正则为:

String IP_V4 = "^(((\\d)|([1-9]\\d)|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d)|([1-9]\\d)|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$"

3. 对应java代码

IPValidator.java

package com.ysx.utils.pattern;

import java.util.regex.Pattern;

/**
 * @author youngbear
 * @email youngbear@aliyun.com
 * @date 2025-03-30 17:54
 * @blog <a href="https://blog.youkuaiyun.com/next_second">...</a>
 * @github <a href="https://github.com/YoungBear">...</a>
 * @description IP校验
 */
public class IPValidator {

    private static final String IP_V4 = "^((\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])$";
    private static final Pattern IP_V4_PATTERN = Pattern.compile(IP_V4);

    /**
     * 是否是有效的ipv4地址
     *
     * @param input 字符串
     * @return 是否是有效的ipv4地址
     */
    public static boolean isValidIpv4(String input) {
        if (input == null) {
            return false;
        }
        return IP_V4_PATTERN.matcher(input).matches();
    }
}

使用junit5单元测试:IPValidatorTest.java

package com.ysx.utils.pattern;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
 * @author youngbear
 * @email youngbear@aliyun.com
 * @date 2025-03-30 17:58
 * @blog <a href="https://blog.youkuaiyun.com/next_second">...</a>
 * @github <a href="https://github.com/YoungBear">...</a>
 * @description
 */
public class IPValidatorTest {

    private static Stream<String> validIPv4Provider() {
        return Stream.of(
                "0.0.0.0",
                "0.0.0.1",
                "127.0.0.1",
                "1.2.3.4",              // 0-9
                "11.1.1.0",             // 10-99
                "101.1.1.0",            // 100-199
                "201.1.1.0",            // 200-249
                "255.255.255.255",      // 250-255
                "192.168.1.1",
                "192.168.1.255",
                "100.100.100.100");
    }

    private static Stream<String> invalidIPv4Provider() {
        return Stream.of(
                null,
                "000.000.000.000",          // leading 0
                "00.00.00.00",              // leading 0
                "1.2.3.04",                 // leading 0
                "1.02.03.4",                // leading 0
                "1.2",                      // 1 dot
                "1.2.3",                    // 2 dots
                "1.2.3.4.5",                // 4 dots
                "192.168.1.1.1",            // 4 dots
                "256.1.1.1",                // 256
                "1.256.1.1",                // 256
                "1.1.256.1",                // 256
                "1.1.1.256",                // 256
                "-100.1.1.1",               // -100
                "1.-100.1.1",               // -100
                "1.1.-100.1",               // -100
                "1.1.1.-100",               // -100
                "1...1",                    // empty between .
                "1..1",                     // empty between .
                "1.1.1.1.",                 // last .
                "");                        // empty
    }

    @ParameterizedTest(name = "#{index} - Run test with IPv4 = {0}")
    @MethodSource("validIPv4Provider")
    void test_ipv4_regex_valid(String ipv4) {
        assertTrue(IPValidator.isValidIpv4(ipv4));
    }

    @ParameterizedTest(name = "#{index} - Run test with IPv4 = {0}")
    @MethodSource("invalidIPv4Provider")
    void test_ipv4_regex_invalid(String ipv4) {
        assertFalse(IPValidator.isValidIpv4(ipv4));
    }
}

源代码地址

参考

1. Java IP Address (IPv4) regex examples

其他的ipv4地址的正则及问题

有问题的

// https://juejin.cn/post/6844903768232820749
// 有问题 00.00.00.00 认为是有效的
String IP_V4 = "^(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$";

// http://www.java2s.com/example/java/java.util.regex/is-ipv4-address-by-regex.html
// -- 有问题 000.000.000.000 认为是合法的
String IPV4_PATTERN ="^(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}$"
// https://mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/
String IPV4_PATTERN ="^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\\.(?!$)|$)){4}$"

正确的:

// https://mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/  
  // 25[0-5]        = 250-255
  // (2[0-4])[0-9]  = 200-249
  // (1[0-9])[0-9]  = 100-199
  // ([1-9])[0-9]   = 10-99
  // [0-9]          = 0-9
  // (\.(?!$))      = can't end with a dot
  private static final String IPV4_PATTERN_SHORTEST =
          "^((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(\\.(?!$)|$)){4}$";      
IP地址的正则表达式 IP地址的正则表达式IP地址的正则表达式 立即下载

相关推荐

IP 正则表达式验证

最后写了一个IP地址的正则表达式验证程序。 代码如下:((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d) 截图如下: 您可能感兴趣的文章:javascript 手机号码正则表达式验证函数JS正则表达式验证数字代码JavaScript正则表达式验证身份证号码是否合法(两种方法)jquery正则表达式验证(手机号、身份证号、中文名称)邮箱地址正则表达式验证代码合集软件开发网特别版java正则表达式验证邮箱、电话号码示例jquery使用正则表达式验证email地址的方法利用js正则

IP的正则表达式

IP的正则表达式

qq_27474555的博客 9825

手把手教你用STM32F103C8T6驱动CLRC663国产NFC模块(兼容A/B/F/15693卡)

本文详细介绍了如何使用STM32F103C8T6驱动国产CLRC663 NFC模块,支持ISO14443A/B、Felica和ISO15693协议。从硬件设计、协议适配到状态监控,提供完整的工程实现方案,适用于智能门锁、支付终端等应用场景。

weixin_30689307的博客 444

正则表达式常用元字符及Ipv4地址校验

一、常用字符 1.@字符 我们经常在正则表达式字符串前面加上@字符,这样不让编译器去解释其中的转义字符,而作为正则表达式的语法(元字符)存在。 2.定位元字符 符号 含义 \b 匹配单词的开始或结束 \B 匹配非单词的开始或结束 ^ ...

qq_39381055的博客 257

squirrel校园二手交易平台

squirrel校园二手交易平台 (适合寻找SSM项目练手的你。) 项目起源:   期末的课程设计,三人一组,我和两个舍友,一时起兴,决定做一个校园二手交易平台,一开始兴致与激情满满,可是后期时间上的冲突,让我们三个人对于这个项目有点累。   这个项目刚定题两天,BezosLee由于通过了360的网上在线笔试,收到了360公司的免费培训邀请,要去北京的360总部进行培训一周,值得庆...

K.SHI的博客 5万+

不只是CPU主频:深入解析英飞凌Aurix TC3xx各外设时钟树(CAN、以太网、Flash时序如何配置)

本文深入解析英飞凌Aurix TC3xx系列微控制器的外设时钟树配置,涵盖CAN、以太网和Flash时序的优化方法。通过详细分析时钟系统架构、关键外设配置及多外设协同设计策略,帮助工程师实现高性能汽车电子控制单元(ECU)开发。特别关注系统时钟的灵活配置与EMC优化技巧,提升系统实时性和可靠性。

weixin_29189373的博客 399

常用正则表达式(包含IP地址(IPv4)/IPv6地址)

Pv4地址 正则表达式:^((25[0-5]|2[0-4]\d|[01]?\d\d?).){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$ 测试环境:Javascript/.Net/C++/JAVA 特点:匹配IPv4地址 IPv6地址 正则表达式:^([\da-fA-F]{1,4}

weixin_44184881的博客 3543

YOLOv8融合HAttention:激活更多像素的注意力机制科研实践指南

HAttention通过层级化像素激活与融合的设计,为YOLOv8的像素级特征利用能力带来了质的飞跃。从原理理解到代码实现,再到集成调优,每一步都是科研中“解决像素信息遗漏难题”的具体实践。如果你在实验中发现某类细节或大尺度目标的检测仍有不足,可以尝试结合数据增强(如随机裁剪、多尺度训练)来强化模型对像素特征的学习能力。科研的价值在于不断挖掘技术的潜力,希望这份指南能真正帮你在目标检测的像素级特征利用领域找到新的突破点,祝你在科研探索中持续收获创新与成长。

FJN110的博客 105

js手机号码正则、邮箱号正则、ipv4地址正则、ipv6地址正则、js经纬度正则、常用正则表达式大全

js手机号码正则、js邮箱号正则、js ipv4地址正则、js ipv6地址正则、js经纬度正则、js特殊字符正则、常用正则表达式大全

qq_41068030的博客 656

AutoSAR MemMap模块概述及配置参数详解

这个模块是干啥的?它是用来配置Memory Mapping and Compiler Abstraction module。

4508

倒立摆的PLC控制(模型分析+ SCL源代码)

首先简单介绍下倒立摆模型,下面这幅图是MATLAB网站上的倒立摆模型,下面我们利用牛顿第二运动定律建立摆杆的运动方程。

RXXW_Dor的博客 3327

正则表达式验证合法的IP地址

IPv4地址 最初设计互联网络时,为了便于寻址和层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上的工作站,服务器和路由器等)有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适应不同容量的网络,即A类~E类。 类别 IP地址范围 最大网络数 最大主机...

It_BeeCoder的博客 4842

015、架构_配置文件_管理节点(proxymanager.ini)

该配置文件中的参数在后台配置,两种生效方式:*所有参数重启生效。*部分参数可以使用工具dbtool动态生效。动态生效命令为:dbtool-pm-load-config。配置文件“proxymanager.ini”用于设置元数据管理模块的信息。文件路径为“~/etc”。配置文件“proxymanager.ini”是普通的文本文件。默认值proxymanager-alarmconfutf8.txt。配置错误或不配置,PM无法连接MDS,无法服务。获取元数据失败超时处理时间。异常时请求启动对等回滚。

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 326

如何用正则表达式搜索ip地址

.” :匹配任何字符"\d" :任何数字0到9简写"\D" : 任何非数字0到9的简写"\s" :空白字符:[\t \n \x0B \f \r] 的简写"\S" : 非空白符 :[ ^\s]的简写"\w" : 单词字符 :[a-zA-Z0-9]的简写"\W" : 非单词字符[ ^\w ]

m0_66337533的博客 850

基于Spring Security 6的OAuth2 系列之二 - 客户端--非代码演示授权码模式

至此,我们就使用浏览器+postman工具演示了通过授权码模式去获取Gitee的用户信息。这过程中,我们只是遵循OAuth2的流程,就能够实现授权方法。那么接下来,我们采用代码方式来实现这个流程。

代码让AI扣 1812

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

常用正则表达式小记

记几类在网络上常用的正则表达式 IPv4 (25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9...

baao0137的博客 174

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JS 常用正则表达式

域名正则表达式: 域名由前缀和后缀组成 前缀可以由1-63个字符组成,字符包括:字母(a-z)、数字(0-9)、连接符(-);第一个和最后一个字符不能是连接符(-) 后缀允许.com、.net、.org ^([0-9a-z]+[0-9a-z\-]*\.)+[a-z]{2,8}$/i 但是abc-.cdf.qq.com这个屏蔽不了,域名的结尾是不能用-的! ^((

梦想的专栏 1434

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IP地址(IPv4)/IPv6地址的正则表达式

原地址:http://pfeishao.blog.163.com/blog/static/18162337020112113130453/ Pv4地址正则表达式:^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$测试环境:Javascript/.Net/C++/JAVA特点:匹配IPv4地址IPv6地址正则表达式:...

weixin_33733810的博客 3576

java:实现检查IP地址(附带源码)

java:实现检查IP地址(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1014

正则表达式 数字和小数点_干货 | 正则表达式全解与常用实例

正则表达式的基本规则正则表达式的常用实例校验密码:必须是大小写字母和数字的组合,不包含特殊字符,长度在6-15之间var regEx = /^(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{6,10}$/;校验电子邮箱地址:var regEx = /^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})$/校验金额,支持小数点后两位:var regEx =...

weixin_39792686的博客 4668

js常用的正则表达式收集

正则表达式在线校验地址:https://tool.oschina.net/regex/ 1、邮箱正则 const emailReg = /^\w+((.\w+)|(-\w+))@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+).[A-Za-z0-9]+$/ 2、手机号正则 const phoneReg = /^[1][3,4,5,7,8][0-9]{9}$/ 3、IPv4地址正则...

winne雪 301

常用正则表达式

常用正则表达式 手机号 ^1[34578]\d{9}$ 邮箱 ^[\w.+-]+@\w*.(?!=\d)([a-zA-Z])+$ 时间时分秒 ^([01]\d|2[0-3])(:[0-5]\d){2}$ IPV4地址 ^(\d|\d{2}|[01]\d{2}|2[0-5]{2})(.(\d|\d{2}|[01]\d{2}|2[0-5]{2})){3}$

ahu_1523的博客 201

正则表达式(8):基本正则表达式小结

上述正则中,”136[[:digit:]]{8}”表示136后面跟随了8个连续的任意数字,所以,”136[[:digit:]]{8}”就表示一个以136开头的11位数字,也就是我们想要找到的”手机号”其实怎样去写正则表达式,没有一个固定的方法,只要能够正确的排列组合,表达出我们想要表达的意思,匹配到我们想要匹配的字符串,就是正确的写法,你也可以通过自己的想法,写出对应正则表达式。为了方便理解,我们可以将上述正则表达式拆分成3段去理解,没错,我们把上述正则拆分成红色标注部分,蓝色标注部分,绿色标注部分。

qq_40531442的博客 1387

常用的正则表达式

正则表达式到哪都缺少不了,常用的几种先记录下,后续如有遇到再补充。 1、匹配url的正则表达式 var reg = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:\/~+#]*[\w\-@?^=%&\/~+#])?$/; 使用说明: (1)、地址必须以http/https/ftp/ftps开头; (2)...

asdXT的博客 1160
上一篇: Java8常用日期时间方法
下一篇: 版本号正则校验及大小比较
杨小熊的笔记
博客等级 码龄15年 125粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值