校验IP地址格式:IPv4、IPv6、IP/掩码和IP段

news/2024/7/7 21:39:54/文章来源:https://www.cnblogs.com/ff2ting/p/18280929

校验IP地址格式:IPv4、IPv6、IP/掩码和IP段

https://www.jianshu.com/p/95d51e51cc2e

IPv4 格式验证

IPv4是32位地址,由四个十进制数(0-255)组成,以点分隔。以下是一个IPv4地址的示例:192.168.0.1。

要验证输入是否符合IPv4格式,我们可以使用正则表达式进行匹配。下面是一个JavaScript函数用于判断IPv4地址的格式:

function isValidIPv4Format(ip) {const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/;return ipRegex.test(ip);
}

该函数接受一个IP地址作为参数,并返回一个布尔值来指示是否符合IPv4格式。

IPv6 格式验证

IPv6是128位地址,由八个四位的十六进制数(0-9、A-F)组成,以冒号分隔。以下是一个IPv6地址的示例:2001:0db8:85a3:0000:0000:8a2e:0370:7334。

要验证输入是否符合IPv6格式,我们同样可以使用正则表达式进行匹配。下面是一个JavaScript函数用于判断IPv6地址的格式:

function isValidIPv6Format(ip) {const ipRegex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;return ipRegex.test(ip);
}

该函数接受一个IP地址作为参数,并返回一个布尔值来指示是否符合IPv6格式。

IP/掩码验证

在网络配置中,常见的情况是将IP地址与子网掩码组合在一起。例如:192.168.0.1/24。这种形式被称为IP/掩码格式。

要验证输入是否符合IP/掩码格式,我们可以使用正则表达式进行匹配。下面是一个JavaScript函数用于判断IP/掩码格式:

function isValidIPWithMaskFormat(ipWithMask) {const ipWithMaskRegex = /^(\d{1,3}\.){3}\d{1,3}\/(1[0-9]|2[0-9]|3[0-2]|\d)$/;return ipWithMaskRegex.test(ipWithMask);
}

该函数接受一个IP/掩码作为参数,并返回一个布尔值来指示是否符合IP/掩码格式。

IP段校验

有时候我们需要校验IP地址的范围,即IP段。例如:192.168.0.1~192.168.0.10。

要验证输入是否符合IP段格式,我们首先需要检查两个IP地址是否都是有效的IP地址,并且前者小于等于后者。下面是一个JavaScript函数用于判断IP段格式:

function isValidIPRange(ip1, ip2) {function isIPv4Address(ip) {// IPv4地址验证逻辑}function isIPv6Address(ip) {// IPv6地址验证逻辑}if ((isIPv4Address(ip1) || isIPv6Address(ip1)) && (isIPv4Address(ip2) || isIPv6Address(ip2))) {// 验证IP段范围的逻辑return true;}return false;
}

该函数接受两个IP地址作为参数,并返回一个布尔值来指示是否符合IP段格式。

通过以上的函数,我们可以在表单中进行IP地址的格式检查和校验。根据需要调用相应的函数,并显示相应的提示信息给用户。

在实际应用中,我们可以使用JavaScript、Python或其他编程语言来实现这些功能。上述代码当处理网络相关的应用程序时,IP地址是一个常见的概念。IPv4和IPv6是当前广泛使用的两种IP地址格式,而IP/掩码和IP段校验是验证IP地址的有效性的常见需求。本文将介绍如何在表单中进行IP地址的格式检查和校验。

IPv4 格式验证

IPv4是32位地址,由四个十进制数(0-255)组成,以点分隔。以下是一个IPv4地址的示例:192.168.0.1。

要验证输入是否符合IPv4格式,我们可以使用正则表达式进行匹配。下面是一个JavaScript函数用于判断IPv4地址的格式:

function isValidIPv4Format(ip) {const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/;return ipRegex.test(ip);
}

该函数接受一个IP地址作为参数,并返回一个布尔值来指示是否符合IPv4格式。

IPv6 格式验证

IPv6是128位地址,由八个四位的十六进制数(0-9、A-F)组成,以冒号分隔。以下是一个IPv6地址的示例:2001:0db8:85a3:0000:0000:8a2e:0370:7334。

要验证输入是否符合IPv6格式,我们同样可以使用正则表达式进行匹配。下面是一个JavaScript函数用于判断IPv6地址的格式:

function isValidIPv6Format(ip) {const ipRegex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;return ipRegex.test(ip);
}

该函数接受一个IP地址作为参数,并返回一个布尔值来指示是否符合IPv6格式。

IP/掩码验证

在网络配置中,常见的情况是将IP地址与子网掩码组合在一起。例如:192.168.0.1/24。这种形式被称为IP/掩码格式。

要验证输入是否符合IP/掩码格式,我们可以使用正则表达式进行匹配。下面是一个JavaScript函数用于判断IP/掩码格式:

function isValidIPWithMaskFormat(ipWithMask) {const ipWithMaskRegex = /^(\d{1,3}\.){3}\d{1,3}\/(1[0-9]|2[0-9]|3[0-2]|\d)$/;return ipWithMaskRegex.test(ipWithMask);
}

该函数接受一个IP/掩码作为参数,并返回一个布尔值来指示是否符合IP/掩码格式。

IP段校验

有时候我们需要校验IP地址的范围,即IP段。例如:192.168.0.1~192.168.0.10。

要验证输入是否符合IP段格式,我们首先需要检查两个IP地址是否都是有效的IP地址,并且前者小于等于后者。下面是一个JavaScript函数用于判断IP段格式:

function isValidIPRange(ip1, ip2) {function isIPv4Address(ip) {// IPv4地址验证逻辑}function isIPv6Address(ip) {// IPv6地址验证逻辑}if ((isIPv4Address(ip1) || isIPv6Address(ip1)) && (isIPv4Address(ip2) || isIPv6Address(ip2))) {// 验证IP段范围的逻辑return true;}return false;
}

该函数接受两个IP地址作为参数,并返回一个布尔值来指示是否符合IP段格式。

通过以上的函数,我们可以在表单中进行IP地址的格式检查和校验。根据需要调用相应的函数,并显示相应的提示信息给用户。

/*** ipv4 格式* IP 格式* ip/掩码* ip1~ip2(ip段)**/
export function isValidIPv4Format(value) {// 判断是否为有效的 IPv4 地址const isIPv4Address = (ip) => {const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/;return ipRegex.test(ip);};// 判断是否为有效的 IPv4/掩码const isIPv4WithMask = (ipWithMask) => {const ipWithMaskRegex = /^(\d{1,3}\.){3}\d{1,3}\/(1[0-9]|2[0-9]|3[0-2]|\d)$/;return ipWithMaskRegex.test(ipWithMask);};// 判断是否为有效的 IPv4 段const isIPv4Range = (ip1, ip2) => {if (!isIPv4Address(ip1) || !isIPv4Address(ip2)) {return false; // 不是有效的 IPv4 地址}const ipParts1 = ip1.split('.');const ipParts2 = ip2.split('.');for (let i = 0; i < 4; i++) {if (parseInt(ipParts1[i], 10) > parseInt(ipParts2[i], 10)) {return false; // ip1 大于 ip2}if (parseInt(ipParts1[i], 10) === parseInt(ipParts2[i], 10)) {continue; // 当前段相等,继续检查下一段}return true; // ip1 小于 ip2}return true; // ip1 等于 ip2};if (isIPv4Address(value)) {return true;// return 'IPv4 地址格式';} else if (isIPv4WithMask(value)) {return true;// return 'IPv4/掩码格式';} else if (value.includes('~') && value.split('~').length === 2 && isIPv4Range(...value.split('~'))) {// return 'IPv4 段格式';return true;} else {return 'IP格式错误';}
}/*** ipv6 格式* IP 格式* ip/掩码* ip1~ip2(ip段)**/
export function isValidIPv6Format(value) {// 判断是否为有效的 IPv6 地址const isIPv6Address = (ip) => {const ipRegex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/;return ipRegex.test(ip);};// 判断是否为有效的 IPv6/掩码const isIPv6WithMask = (ipWithMask) => {const ipWithMaskRegex = /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\/(12[0-8]|1[01]\d|\d{1,2})$/;return ipWithMaskRegex.test(ipWithMask);};// 判断是否为有效的 IPv6 段const isIPv6Range = (ip1, ip2) => {if (!isIPv6Address(ip1) || !isIPv6Address(ip2)) {return false; // 不是有效的 IPv6 地址}const ipParts1 = ip1.split(':');const ipParts2 = ip2.split(':');for (let i = 0; i < 8; i++) {if (parseInt(ipParts1[i], 16) > parseInt(ipParts2[i], 16)) {return false; // ip1 大于 ip2}if (parseInt(ipParts1[i], 16) === parseInt(ipParts2[i], 16)) {continue; // 当前段相等,继续检查下一段}return true; // ip1 小于 ip2}return true; // ip1 等于 ip2};if (isIPv6Address(value)) {return true;} else if (isIPv6WithMask(value)) {return true;} else if (value.includes('~') && value.split('~').length === 2 && isIPv6Range(...value.split('~'))) {return true;} else {return 'IP格式错误';}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/736665.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7.1 ~ 7.7

本部7.1 搬了校区。 发现我们虽然是在西扩上课,但宿舍还是老校区的 \(12\) 人宿舍,输。 不过教学楼好玩的东西还是挺多的。 本来我们是和化奥组一个班,但因为物奥集训 && 我们班人数过多 (\(69\)) 把我们和生奥放在了一起; 然后我们名义上的班主任还是张华,各种老…

发布构件到Maven中央仓库(2024-06更新版 - 解决2024年6月后发布报 status code 401 错误)

之前很久没发布Maven中央仓库了,2024年6月发布突然报 status code 401 错误,一顿查询后发现仓库发布改到中央门户网站了 https://central.sonatype.com/。报错如下:

本地资源(local resource)与项目资源文件(project resource)的区别

导入“本地资源”的图片,会在Form文件下面的Form.resx文件里面,不可以在多个Form界面引用,不可以在里面修改图片的名称; 导入“项目资源文件”的图片,会保存在Properties文件夹下面的Resources.resx文件夹里面,可以在多个form界面引用,可以在里面修改图片的名称。注意:…

Qt/C++编写地图应用/离线地图下载/路径规划/轨迹回放/海量点/坐标转换

一、前言说明 这个地图组件写了很多年了,最初设计的比较粗糙,最开始只是为了满足项目需要,并没有考虑太多拓展性,比如最初都是按照百度地图写死在代码中,经过这几年大量的现场实际应用,以及大量的用户提出的改进意见,逐渐萌生了彻底重新编写对应地图相关的代码,比如基类…

go语言的结构体标签tag 介绍

https://juejin.cn/post/7005465902804123679博客中所涉及到的图片都有版权,请谨慎使用

COOIS/COHV增强

1、文档说明 本文档介绍COOIS/COHV事务码中常用的选择屏幕增强和ALV增强 2、选择屏幕增强 COOIS生产订单抬头选择屏幕添加筛选条件,并将自定义数据添加到报表选择屏幕新增筛选字段函数模块中,将选择屏幕筛选条件抛到内存。此处可以优化,将不属于自定义删选条件去掉,只抛自定…

题解 - 数字计数

忘了声明了,所有题图均来源于 衣服。题目 思路简析 正解是数位 dp,但是我不太会,所以我打分块。 考虑从 \(10^6\) 到 \(2\times10^6\) 和从 \(3\times10^6\) 到 \(4\times10^6\),其中真正的区别只有 观察到数据范围是 \(10^{12}\),分为一些块,每块长 \(10^6\) 会比较均衡…

从零开始带你上手体验Sermant自定义插件开发

本文对Sermant的自定义插件开发的流程进行了体验和探索,包括项目编译、运行、动态配置验证、插件拦截原理等内容,希望对初次体验Sermant高效开发插件的开发者有所帮助。本文分享自华为云社区《Sermant自定义插件开发上手体验》,作者:华为云开源。 一、研究缘由 由于目前我们…

面试:10亿数据如何最快速插入MySQL?

转载:https://mp.weixin.qq.com/s/kL1srP3FZjaTSXLULsUS5g最快的速度把10亿条数据导入到数据库,首先需要和面试官明确一下,10亿条数据什么形式存在哪里,每条数据多大,是否有序导入,是否不能重复,数据库是否是MySQL? 假设和面试官明确后,有如下约束10亿条数据,每条数据…

2024年好用的5款国产低代码开发平台

最近几年,低代码\无代码\零代码技术和快速开发平台比较热门,全球知名低代码平台厂商有:微软Power Platform、西门子Mendix、OutSystems等。我们国内最近几年也有一些信创国产化低代码平台涌现出来,比如:云程、氚云、轻流、简道云、得帆、ClickPaaS等,华为、阿里、百度等一…

camunda如何实现流程跳转和流程退回

我们在使用工作流的时候,常常有“流程退回”、“流程跳转”、“自由流”、“动态加签”等这样的需求。Camunda流程平台提供了这样的机制和接口,虽然流程模型定义活动执行顺序的序列流,但有时需要灵活地重新启动活动或取消正在运行的活动,进而可以实现中国特色的流程需求。文…

Docker Hub 无法访问,替代镜像

我使用以下配置成功拉取了mysql 8.0.33 和redis lastest,但是不知道究竟是哪一个起作用了linux 执行 sudo vim /etc/docker/daemon.json 填入以下内容:{"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerproxy.com","…

Linux管道符

十五、管道符 管道符和grep命令结合的是最多的 管道符的标准定义: 管道是一种通信机制,常用语进程之间的通信。它表现出来的形式:将前一个的标准输出(stdout)作为后面命令的标准输入(stdin)利用grep和管道符来查看用户信息用户信息存储在 /etc/passwd中 我们自己创建的用户…

C#数据结构与算法入门教程,值得收藏学习!

前言 最近看到DotNetGuide技术社区交流群有不少小伙伴提问:想要系统化的学习数据结构和算法,不知道该怎么入门,有无好的教程推荐的?,今天大姚给大家推荐2个开源、免费的C#数据结构与算法入门教程,值得收藏学习! 数据结构与算法的作用 数据结构与算法在计算机科学中具有不…

多线程下的网格生成及性能分析

前言 概述通过多线程方式实现上千个对象的网格生成,并观察运行效率。多线程通过Thread来进行,每个线程中执行GenerateMeshData方法,在方法中对不同种类的网格进行顶点和三角面序列的计算。首先设置简单立方体,之后改为柏林噪声下生成的复杂地形。主线程限制 Unity设计之初就…

公众号软件链接

链接:https://wwt.lanzouq.com/b0174n6pc密码:gb5dhttps://wwt.lanzouq.com/b0174pdab密码:b357韩科信息咨讯每日科技资讯,致力于新颖、古怪网站分享与实用技巧!谢谢大家支持,您的"在看"、“分享”是我们不断进步之动力! 获取资源扫码关注我们 A world of wonde…

android 安装CA证书

android 安装CA证书 提取证书计算证书的hash值 C:\Users\czl\Downloads>"C:\Program Files\Git\usr\bin\openssl.exe" x509 -inform PEM -subject_hash_old -in charles.pem b682a732 -----BEGIN CERTIFICATE----- MIIFRjCCBC6gAwIBAgIGAY1GZhqIMA0GCSqGSIb3DQEB…

全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解-提高代码可读性的利器

本文对类型注解的定义、使用原因进行了基本介绍,同时对使用typing模块实现类型提示和类型检查进行了基本讲解,通过使用类型注解可以让开发者更清晰地了解函数和变量的预期类型。全网最适合入门的面向对象编程教程:07 类和对象的 Python 实现-类型注解-提高代码可读性的利器 …

训练记录(Jul.)

7/2 AT_abc217_f *提高+/省选- 设 \(f_{l, r}\) 为把 \([l, r]\) 消去的方案数。 P3607 [USACO17JAN] Subsequence Reversal P *省选/NOI- CF1922F *2500 状态很好想,之前是因为转移成环所以没补,结果发现也可以没环。 \(f_{l, r, x}\) 表示把 \([l, r]\) 推平成 \(x\) 的…

Ubuntu24.04下Docker安装与配置

安装docker 官方教程加上代理 sudo apt-get updatesudo apt-get install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringscurl指定代理 sudo curl -x http://127.0.0.1:7897 -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.…