当前位置:主页 > 查看内容

【C#】利用正则表达式验证IPV4地址的合法性

发布时间:2021-09-11 00:00| 位朋友查看

简介:【C#】利用正则表达式验证IPV4地址的合法性 1 题目描述 2 源码详解 3 实现效果 1 题目描述 利用正则表达式验证IPV4地址的合法性并输出是第几类地址及是否为私有地址或保留地址。 IPV4的地址分类及网络号的范围如下 A类地址 1A类地址第1字节为网络地址其它3个……

【C#】利用正则表达式验证IPV4地址的合法性

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://blog.csdn.net/Gyangxixi/article/details/115938688
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:STM32F3/F4基于DSP的FIR滤波器应用 下一篇:没有了

推荐图文


随机推荐