C#结合正则表达式判断各种用户输入合法性
2023-09-11 14:19:20 时间
using System; using System.Text.RegularExpressions; namespace SG_VQCDataCollection { /// <summary> /// 通过Framwork类库中的Regex类实现了一些特殊功能数据检查 /// </summary> public class MetarnetRegex { private static MetarnetRegex instance = null; public static MetarnetRegex GetInstance() { if (MetarnetRegex.instance == null) { MetarnetRegex.instance = new MetarnetRegex(); } return MetarnetRegex.instance; } private MetarnetRegex() { } /// <summary> /// 判断输入的字符串只包含汉字 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsChineseCh(string input) { //Regex regex = new Regex("^[\一-\龥]+$"); //改了一下 Regex regex = new Regex("^[\一-\龥]+$"); return regex.IsMatch(input); } /// <summary> /// 匹配3位或4位区号的电话号码,其中区号可以用小括号括起来, /// 也可以不用,区号与本地号间可以用连字号或空格间隔, /// 也可以没有间隔 /// \(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}|\(0\d{3}\)[- ]?\d{7}|0\d{3}[- ]?\d{7} /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsPhone(string input) { string pattern = "^\\(0\\d{2}\\)[- ]?\\d{8}$|^0\\d{2}[- ]?\\d{8}$|^\\(0\\d{3}\\)[- ]?\\d{7}$|^0\\d{3}[- ]?\\d{7}$"; Regex regex = new Regex(pattern); return regex.IsMatch(input); } /// <summary> /// 判断输入的字符串是否是一个合法的手机号 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsMobilePhone(string input) { Regex regex = new Regex("^13\\d{9}$"); return regex.IsMatch(input); } /// <summary> /// 判断输入的字符串只包含数字 /// 可以匹配整数和浮点数 /// ^-?\d+$|^(-?\d+)(\.\d+)?$ /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsNumber(string input) { string pattern = "^-?\\d+$|^(-?\\d+)(\\.\\d+)?$"; Regex regex = new Regex(pattern); return regex.IsMatch(input); } /// <summary> /// 匹配非负整数 /// /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsNotNagtive(string input) { Regex regex = new Regex(@"^\d+$"); return regex.IsMatch(input); } /// <summary> /// 匹配正整数 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsUint(string input) { Regex regex = new Regex("^[0-9]*[1-9][0-9]*$"); return regex.IsMatch(input); } /// <summary> /// 判断输入的字符串字包含英文字母 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsEnglisCh(string input) { Regex regex = new Regex("^[A-Za-z]+$"); return regex.IsMatch(input); } /// <summary> /// 判断输入的字符串是否是一个合法的Email地址 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsEmail(string input) { string pattern = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; Regex regex = new Regex(pattern); return regex.IsMatch(input); } /// <summary> /// 判断输入的字符串是否只包含数字和英文字母 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsNumAndEnCh(string input) { string pattern = @"^[A-Za-z0-9]+$"; Regex regex = new Regex(pattern); return regex.IsMatch(input); } /// <summary> /// 判断输入的字符串是否是一个超链接 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsURL(string input) { //string pattern = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"; string pattern = @"^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"; Regex regex = new Regex(pattern); return regex.IsMatch(input); } /// <summary> /// 判断输入的字符串是否是表示一个IP地址 /// </summary> /// <param name="input">被比较的字符串</param> /// <returns>是IP地址则为True</returns> public static bool IsIPv4(string input) { string[] IPs = input.Split('.'); Regex regex = new Regex(@"^\d+$"); for (int i = 0; i < IPs.Length; i++) { if (!regex.IsMatch(IPs[i])) { return false; } if (Convert.ToUInt16(IPs[i]) > 255) { return false; } } return true; } /// <summary> /// 计算字符串的字符长度,一个汉字字符将被计算为两个字符 /// </summary> /// <param name="input">需要计算的字符串</param> /// <returns>返回字符串的长度</returns> public static int GetCount(string input) { return Regex.Replace(input, @"[\一-\龥/g]", "aa").Length; } /// <summary> /// 调用Regex中IsMatch函数实现一般的正则表达式匹配 /// </summary> /// <param name="pattern">要匹配的正则表达式模式。</param> /// <param name="input">要搜索匹配项的字符串</param> /// <returns>如果正则表达式找到匹配项,则为 true;否则,为 false。</returns> public static bool IsMatch(string pattern, string input) { Regex regex = new Regex(pattern); return regex.IsMatch(input); } /// <summary> /// 从输入字符串中的第一个字符开始,用替换字符串替换指定的正则表达式模式的所有匹配项。 /// </summary> /// <param name="pattern">模式字符串</param> /// <param name="input">输入字符串</param> /// <param name="replacement">用于替换的字符串</param> /// <returns>返回被替换后的结果</returns> public static string Replace(string pattern, string input, string replacement) { Regex regex = new Regex(pattern); return regex.Replace(input, replacement); } /// <summary> /// 在由正则表达式模式定义的位置拆分输入字符串。 /// </summary> /// <param name="pattern">模式字符串</param> /// <param name="input">输入字符串</param> /// <returns></returns> public static string[] Split(string pattern, string input) { Regex regex = new Regex(pattern); return regex.Split(input); } /// <summary> /// 判断输入的字符串是否是合法的IPV6 地址 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsIPV6(string input) { string pattern = ""; string temp = input; string[] strs = temp.Split(':'); if (strs.Length > 8) { return false; } int count = MetarnetRegex.GetStringCount(input, "::"); if (count > 1) { return false; } else if (count == 0) { pattern = @"^([\da-f]{1,4}:){7}[\da-f]{1,4}$"; Regex regex = new Regex(pattern); return regex.IsMatch(input); } else { pattern = @"^([\da-f]{1,4}:){0,5}::([\da-f]{1,4}:){0,5}[\da-f]{1,4}$"; Regex regex1 = new Regex(pattern); return regex1.IsMatch(input); } } /* ******************************************************************* * 1、通过“:”来分割字符串看得到的字符串数组长度是否小于等于8 * 2、判断输入的IPV6字符串中是否有“::”。 * 3、如果没有“::”采用 ^([\da-f]{1,4}:){7}[\da-f]{1,4}$ 来判断 * 4、如果有“::” ,判断"::"是否止出现一次 * 5、如果出现一次以上 返回false * 6、^([\da-f]{1,4}:){0,5}::([\da-f]{1,4}:){0,5}[\da-f]{1,4}$ * ******************************************************************/ /// <summary> /// 判断字符串compare 在 input字符串中出现的次数 /// </summary> /// <param name="input">源字符串</param> /// <param name="compare">用于比较的字符串</param> /// <returns>字符串compare 在 input字符串中出现的次数</returns> private static int GetStringCount(string input, string compare) { int index = input.IndexOf(compare); if (index != -1) { return 1 + GetStringCount(input.Substring(index + compare.Length), compare); } else { return 0; } } } }
相关文章
- C#怎么做系统托盘
- C#中【正则表达式regular expression】相关的知识
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
- C#订阅与发布标准实现 visual studio code .net 开发 设计模式之☞策略模式 C#字符串转二进制、二进制转字符串 c# 接口的协变和逆变 c# 使用迭代器来创建可枚举类型 博客园首页新随笔联系订阅管理 随笔 - 117 文章 - 0 评论 - 57 c# 创建,加载,修改XML文档
- 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
- 利用反射快速给Model实体赋值 使用 Task 简化异步编程 Guid ToString 格式知多少?(GUID 格式) Parallel Programming-实现并行操作的流水线(生产者、消费者) c# 无损高质量压缩图片代码 8种主要排序算法的C#实现 (一) 8种主要排序算法的C#实现 (二)
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- C#中泛型方法与泛型接口 C#泛型接口 List<IAll> arssr = new List<IAll>(); interface IPerson<T> c# List<接口>小技巧 泛型接口协变逆变的几个问题
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能
- Word控件Spire.Doc 【图像形状】教程(5) 如何在 C# 中将文本环绕在图像周围
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
- C# 隐藏显示桌面图标
- C#【通用类】常见的数据验证(部分使用正则表达式)
- C#,电话数字键盘问题(Mobile Numeric Keypad problem)的算法与源代码
- 倍加福二维码测试2——C#界面程序开发
- 一个例子来看C#泛型是如何登场的
- c# 正则表达式
- C# 创建表ACCESS表,添加修改字段
- C#学习之一个经验教训
- C#-自定义InformationBox
- C#实现RSA签名及认证
- [转] C#获取电脑客户端IP地址及当前用户名
- c#转义字符
- 【C#】复制物体后,给副本命名的规则——用正则表达式
- C# 导入Excel