利用正则表达式验证IPV4地址的合法性,并输出是第几类地址及是否为私有地址或保留地址。
IPV4的地址分类及网络号的范围如下:
- A类地址
(1)A类地址第1字节为网络地址,其它3个字节为主机地址。
(2)A类地址范围:1.0.0.1—126.255.255.254
(3)A类地址中的私有地址和保留地址:
①10.X.X.X是私有地址范围(10.0.0.0-10.255.255.255)
②127.X.X.X是保留地址,用做循环测试用的。- B类地址
(1)B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。
(2)B类地址范围:128.0.0.1—191.255.255.254。
(3)B类地址的私有地址和保留地址:
①172.16.0.0—172.31.255.255是私有地址
②169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。- C类地址
(1)C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。
(2)C类地址范围:192.0.0.1—223.255.255.254。
(3)C类地址中的私有地址:192.168.X.X是私有地址。(192.168.0.0-192.168.255.255)- D类地址
(1)D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。
(2)D类地址范围:224.0.0.1—239.255.255.254- E类地址
(1)E类地址不分网络地址和主机地址,它的第1个字节的前五位固定为11110。
(2)E类地址范围:240.0.0.1—255.255.255.254
using System;
using System.Text.RegularExpressions;
namespace Csharp6_1
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.Write("Please input your address : ");
String inputAddress = Convert.ToString(Console.ReadLine());
String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
//A
String Legal_Address_A = "^([1-9]|[1-9]\\d|1[0-1]\\d|12[0-7])\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
String Private_Address_A = "^(10)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
String Reserved_Address_A = "^(127)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
//B 128-191
String Legal_Address_B = "^(12[8-9]|19[0-1]|1[3-8]\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
String Private_Address_B = "^(172)\\." + "(1[6-9]|2\\d|31)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
String Reserved_Address_B = "^(169)\\." + "(254)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
//C 192-223
String Legal_Address_C = "^(19[2-9]|2[0-1]\\d|22[0-3])\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
String Private_Address_C = "^(192)\\." + "(168)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
//D 224-239
String Legal_Address_D = "^(22[4-9]|23\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
//E 240-255
String Legal_Address_E = "^(24\\d|25[0-5])\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
if ( ! Regex.IsMatch(inputAddress, regex))
{
Console.WriteLine("不符合IPV4地址正则表达式,程序退出!");
break;
}
// 判断A类地址
if (Regex.IsMatch(inputAddress, Legal_Address_A))
{
Console.WriteLine("该地址为A类地址。");
if (Regex.IsMatch(inputAddress, Private_Address_A))
{
Console.WriteLine("且为A类地址的私有地址。");
}
if (Regex.IsMatch(inputAddress, Reserved_Address_A))
{
Console.WriteLine("且为A类地址的保留地址。");
}
}
// 判断B类地址
if (Regex.IsMatch(inputAddress, Legal_Address_B))
{
Console.WriteLine("该地址为B类地址。");
if (Regex.IsMatch(inputAddress, Private_Address_B))
{
Console.WriteLine("且为B类地址的私有地址。");
}
if (Regex.IsMatch(inputAddress, Reserved_Address_B))
{
Console.WriteLine("且为B类地址的保留地址。");
}
}
// 判断C类地址
if (Regex.IsMatch(inputAddress, Legal_Address_C))
{
Console.WriteLine("该地址为C类地址。");
if (Regex.IsMatch(inputAddress, Private_Address_C))
{
Console.WriteLine("且为C类地址的私有地址。");
}
}
// 判断D类地址
if (Regex.IsMatch(inputAddress, Legal_Address_D))
{
Console.WriteLine("该地址为D类地址。");
}
// 判断E类地址
if (Regex.IsMatch(inputAddress, Legal_Address_E))
{
Console.WriteLine("该地址为E类地址。");
}
}
}
}
}
深or浅拷贝 深浅拷贝 前言 一、深浅拷贝哪家强 二、写时拷贝 总结 前言 之前我们...
常见信号介绍 SIGINT 2 CtrlC时OS送给前台进程组中每个进程 SIGABRT 6 调用abort...
正则表达式构造函数:newRegExp("pattern"[,"flags"]); 参数说明: pattern--一...
【51CTO.com原创稿件】今年国庆期间,除了看到阅兵式上国产自研的枪械和飞机,还...
作者 |?写代码的明哥 来源 |Python编程时光ID: Cool-Python 如何在运行状态查看...
复制代码 代码如下: form action="/hehe" method="post" input type="text" valu...
MySQL 死锁是面试常问问题,金三银四,所以最近面试相关的文章比较多,本文章是...
MySQL 和Oracle 在开发中的使用是随处可见的,那就简单去了解一下这俩款火的不行...
MongoDB 4.0 已正式发布,MongoDB 是一个开源文档数据库,提供高性能、高可用性...
包含搜索内容的效果: 没有匹配内容的效果: html代码: 贴上来这张html是为了让大...