【C#】利用正則運算式驗證IPV4地址的合法性
- 1 題目描述
- 2 原始碼詳解
- 3 實作效果
1 題目描述
利用正則運算式驗證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
2 原始碼詳解
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類地址,");
}
}
}
}
}
3 實作效果

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278962.html
標籤:其他
