C#中实现校验是否包含中文与http接口地址中解析ip和端口号

场景

Winform/CSharp中实现对Http接口地址、IP地址字符串格式/合法性校验:

Winform/CSharp中实现对Http接口地址、IP地址字符串格式/合法性校验_c# 检查ip格式_霸道流氓气质的博客-CSDN博客

在上面的基础上对某http接口地址(ip加端口号,示例http://127.0.0.1:9092)

进行校验是否包含中文以及解析该地址获取ip和端口号

博客:
霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客

实现

1、字符串中是否包含中文校验

GB2312码,是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集------基本集》,

由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。

GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。

GB2312规定"对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示",

习惯上称第一个字节为"高字节",第二个字节为"低字节"。

GB2312 将代码表分为94个区,对应第一字节;每个区94个位,对应第二字节,

两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。

01-09 区为符号、数字区,16-87区为汉字区,10-15区、88-94区是有待进一步标准化的空白区。

GB2312将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;

第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。

故而 GB2312最多能表示6763个汉字。GB2312的编码范围为2121H-777EH,与ASCII有重叠,

通行方法是将GB码两个字节的最高位置1以示区别。

代码实现

复制代码
        /// <summary>
        /// 判断句子中是否含有中文
        /// </summary>
        /// <param >字符串</param>
        public bool WordsIScn(string words)
        {
            string TmmP;
            for (int i = 0; i < words.Length; i++)
            {
                TmmP = words.Substring(i, 1);
                byte[] sarr = Encoding.GetEncoding("gb2312").GetBytes(TmmP);
                if (sarr.Length == 2)
                {
                    return true;
                }
            }
            return false;
        }

2、解析如上示例的http接口地址的前缀获取ip和端口号

声明默认值为127.0.0.1和80端口

然后判断是否包含https,分别进行不同长度的截取后面的ip:端口号的内容

其次判断是否包含冒号,不包含则是80端口

包含则按照冒号进行split

这里不允许端口后面继续跟其他内容,否则split和转换为int出异常后直接返回false,代表校验不通过

然后将解析结果赋值给两个全局变量Global.Instance.apiIpString,Global.Instance.apiPort

代码实现

复制代码
        /// <summary>
        /// 解析htpp接口字符串获取ip和端口号
        /// </summary>
        /// <param name="httpStr"></param>
        public static bool analysisIpPort(string httpStr)
        {
            string subString = string.Empty;
            string ipStr = "127.0.0.1";
            int port = 80;
            try {
                if (httpStr.Contains("https"))
                {
                    subString = httpStr.Substring(8);
                }
                else
                {
                    subString = httpStr.Substring(7);
                }
                //包含冒号则说明带端口号
                if (subString.Contains(":"))
                {
                    string[] result = subString.Split(':');
                    ipStr = result[0];
                    port = int.Parse(result[1]);
                }//否则使用默认80端口
                else
                {
                    ipStr = subString;
                }
                Global.Instance.apiIpString = ipStr;
                Global.Instance.apiPort = port;
                return true;
            }
            catch (Exception exception)
            {
                return false;
            }      
        }
相关推荐
软件黑马王子29 分钟前
20.Resources资源加载:基本实现
开发语言·前端框架·c#
严谨的麻辣烫1 小时前
AI Agent为什么越来越需要固定出口IP?从API白名单到生产环境网络管理
服务器·网络·tcp/ip·代理服务器
captain3761 小时前
TCP网络编程:ServerSocket与Socket详解
服务器·网络·tcp/ip
张人玉1 小时前
基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统
windows·sqlite·c#·.net
1314lay_10071 小时前
C#调用Sql Server存储过程,并且使用传入表结构
数据库·经验分享·笔记·sqlserver·c#
慧都小妮子2 小时前
.NET 报表控件选型对比:Stimulsoft 与 FastReport 怎么选
c#·.net·报表开发·数据可视化·报表控件·报表引擎选型
流烟默3 小时前
HTTP 连接管理技术梳理:JDK KeepAliveCache 机制与池化选型
java·网络协议·http
1314lay_10074 小时前
C#调用Sql Server存储过程,有返回值的
数据库·sqlserver·c#
清水白石0084 小时前
ThreadPoolExecutor 线程越多越快?从 30ms HTTP 调用讲透并发数、连接池与背压
网络·网络协议·http
IT小白杨4 小时前
eBay多账号如何应对关联判定:主体、收款、IP、环境四层配置清单一次讲清
java·网络·网络协议·tcp/ip·自动化·指纹浏览器