这是
風語·深蓝
很早以前写的一个正则表达式验证工具类,包含了一些常见的校验和支持自定义的正则表达式匹配,可以选择完全匹配,也可以获取所有匹配项。曾用它仿造Eclispe下的正则表达式插件写过一个工具。因为最近突然有几个朋友都在问这方面的问题,干脆就把代码贴出来好了。- usingSystem;
- usingSystem.Collections;
- usingSystem.Text.RegularExpressions;
- namespaceXrinehart.Framework.Common.Validate
- {
- /**////<summary>
- ///RegularMatch的摘要说明。
- ///</summary>
- publicclassRegularMatch
- {
- privatestring_String;
- privatebool_IsEntirety;
- /**////<summary>
- ///可以进行判断的类型
- ///</summary>
- publicenumOperation
- {
- Byte,SByte,Int16,Int32,Int64,Single,Double,Boolean,Char,Decimal,DateTime,Date,Time,
- EMail,URL,ChinaPhone,ChineseWord,ChinesePostalCode,Number,StringModel_01,StringModel_02,WideWord,NarrowWord,IPAddress,
- ChineseMobile,ChineseID
- };
- publicRegularMatch(){}
- 用于判断字符串是否是对应类型(默认为包含匹配)#region用于判断字符串是否是对应类型(默认为包含匹配)
- publicboolIsAccordType(stringstrVerifyString,Operationop)
- {
- returnIsAccordType(strVerifyString,op,false);
- }
- #endregion
- 用于判断字符串是否是对应类型(或是否包含对应类型的字符)#region用于判断字符串是否是对应类型(或是否包含对应类型的字符)
- /**////<summary>
- ///用于判断字符串是否是对应类型
- ///</summary>
- ///<paramname="strVerifyString">String,需要判断的字符串</param>
- ///<paramname="op">Operation枚举,用于选择需要进行的操作</param>
- ///<paramname="IsEntirety">Boolean,判断是完全匹配还是包含匹配模式(仅适用于非类型判断时)</param>
- ///<returns></returns>
- publicboolIsAccordType(stringstrVerifyString,Operationop,boolIsEntirety)
- {
- _String=strVerifyString;
- _IsEntirety=IsEntirety;
- switch(op)
- {
- caseOperation.Byte:
- {
- returnIsByte();
- }
- caseOperation.SByte:
- {
- returnIsSByte();
- }
- caseOperation.Int16:
- {
- returnIsInt16();
- }
- caseOperation.Int32:
- {
- returnIsInt32();
- }
- caseOperation.Int64:
- {
- returnIsInt64();
- }
- caseOperation.Single:
- {
- returnIsSingle();
- }
- caseOperation.Double:
- {
- returnIsDouble();
- }
- caseOperation.Boolean:
- {
- returnIsBoolean();
- }
- caseOperation.Char:
- {
- returnIsChar();
- }
- caseOperation.Decimal:
- {
- returnIsDecimal();
- }
- caseOperation.DateTime:
- {
- returnIsDateTime();
- }
- caseOperation.Date:
- {
- returnIsDate();
- }
- caseOperation.Time:
- {
- returnIsTime();
- }
- caseOperation.IPAddress:
- {
- returnIsIPAddress();
- }
- caseOperation.ChinaPhone:
- {
- returnIsChinaPhone();
- }
- caseOperation.ChinesePostalCode:
- {
- returnIsChinesePostalCode();
- }
- caseOperation.ChineseMobile:
- {
- returnIsChineseMobile();
- }
- caseOperation.EMail:
- {
- returnIsEmail();
- }
- caseOperation.URL:
- {
- returnIsURL();
- }
- caseOperation.ChineseWord:
- {
- returnIsChineseWord();
- }
- caseOperation.Number:
- {
- returnIsNumber();
- }
- caseOperation.StringModel_01:
- {
- returnIsStringModel_01();
- }
- caseOperation.StringModel_02:
- {
- returnIsStringModel_02();
- }
- caseOperation.WideWord:
- {
- returnIsWideWord();
- }
- caseOperation.NarrowWord:
- {
- returnIsNarrowWord();
- }
- caseOperation.ChineseID:
- {
- returnIsChineseID();
- }
- default:
- {
- returnfalse;
- }
- }
- }
- #endregion
- 具体验证方法#region具体验证方法
- 是否Byte类型(8位的无符号整数):0和255之间的无符号整数#region是否Byte类型(8位的无符号整数):0和255之间的无符号整数
- /**////<summary>
- ///是否Byte类型(8位的无符号整数):0和255之间的无符号整数
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsByte()
- {
- try
- {
- Byte.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否SByte类型(8位的有符号整数):-128到+127之间的整数#region是否SByte类型(8位的有符号整数):-128到+127之间的整数
- /**////<summary>
- ///是否SByte类型(8位的有符号整数):-128到+127之间的整数
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsSByte()
- {
- try
- {
- SByte.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Int16类型(16位的有符号整数):-32768到+32767之间的有符号整数#region是否Int16类型(16位的有符号整数):-32768到+32767之间的有符号整数
- /**////<summary>
- ///是否Int16类型(16位的有符号整数):-32768到+32767之间的有符号整数
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsInt16()
- {
- try
- {
- Int16.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Int32类型(32位的有符号整数):-2,147,483,648到+2,147,483,647之间的有符号整数#region是否Int32类型(32位的有符号整数):-2,147,483,648到+2,147,483,647之间的有符号整数
- /**////<summary>
- ///是否Int32类型(32位的有符号整数):-2,147,483,648到+2,147,483,647之间的有符号整数
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsInt32()
- {
- try
- {
- Int32.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Int64类型(64位的有符号整数):-9,223,372,036,854,775,808到+9,223,372,036,854,775,807之间的整数#region是否Int64类型(64位的有符号整数):-9,223,372,036,854,775,808到+9,223,372,036,854,775,807之间的整数
- /**////<summary>
- ///是否Int64类型(64位的有符号整数):-9,223,372,036,854,775,808到+9,223,372,036,854,775,807之间的整数
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsInt64()
- {
- try
- {
- Int64.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Single类型(单精度(32位)浮点数字):-3.402823e38和+3.402823e38之间的单精度32位数字#region是否Single类型(单精度(32位)浮点数字):-3.402823e38和+3.402823e38之间的单精度32位数字
- /**////<summary>
- ///是否Single类型(单精度(32位)浮点数字):-3.402823e38和+3.402823e38之间的单精度32位数字
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsSingle()
- {
- try
- {
- Single.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Double类型(单精度(64位)浮点数字):-1.79769313486232e308和+1.79769313486232e308之间的双精度64位数字#region是否Double类型(单精度(64位)浮点数字):-1.79769313486232e308和+1.79769313486232e308之间的双精度64位数字
- /**////<summary>
- ///是否Double类型(单精度(64位)浮点数字):-1.79769313486232e308和+1.79769313486232e308之间的双精度64位数字
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsDouble()
- {
- try
- {
- Double.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Boolean类型(布尔值):true或false#region是否Boolean类型(布尔值):true或false
- /**////<summary>
- ///是否Double类型(单精度(64位)浮点数字):-1.79769313486232e308和+1.79769313486232e308之间的双精度64位数字
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsBoolean()
- {
- try
- {
- Boolean.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Char类型(Unicode(16位)字符):该16位数字的值范围为从十六进制值0x0000到0xFFFF#region是否Char类型(Unicode(16位)字符):该16位数字的值范围为从十六进制值0x0000到0xFFFF
- /**////<summary>
- ///是否Char类型(Unicode(16位)字符):该16位数字的值范围为从十六进制值0x0000到0xFFFF
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsChar()
- {
- try
- {
- Char.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Char类型(96位十进制值):从正79,228,162,514,264,337,593,543,950,335到负79,228,162,514,264,337,593,543,950,335之间的十进制数#region是否Char类型(96位十进制值):从正79,228,162,514,264,337,593,543,950,335到负79,228,162,514,264,337,593,543,950,335之间的十进制数
- /**////<summary>
- ///是否Char类型(96位十进制值):从正79,228,162,514,264,337,593,543,950,335到负79,228,162,514,264,337,593,543,950,335之间的十进制数
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsDecimal()
- {
- try
- {
- Decimal.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否DateTime类型(表示时间上的一刻):范围在公元(基督纪元)0001年1月1日午夜12:00:00到公元(C.E.)9999年12月31日晚上11:59:59之间的日期和时间#region是否DateTime类型(表示时间上的一刻):范围在公元(基督纪元)0001年1月1日午夜12:00:00到公元(C.E.)9999年12月31日晚上11:59:59之间的日期和时间
- /**////<summary>
- ///是否DateTime类型(表示时间上的一刻):范围在公元(基督纪元)0001年1月1日午夜12:00:00到公元(C.E.)9999年12月31日晚上11:59:59之间的日期和时间
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsDateTime()
- {
- try
- {
- DateTime.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否Date类型(表示时间的日期部分):范围在公元(基督纪元)0001年1月1日到公元(C.E.)9999年12月31日之间的日期#region是否Date类型(表示时间的日期部分):范围在公元(基督纪元)0001年1月1日到公元(C.E.)9999年12月31日之间的日期
- /**////<summary>
- ///是否Date类型(表示时间的日期部分):范围在公元(基督纪元)0001年1月1日到公元(C.E.)9999年12月31日之间的日期
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsDate()
- {
- DateTimeValue;
- try
- {
- Value=DateTime.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- if(Value.Date.ToString()==_String)
- {
- returntrue;
- }
- else
- {
- returnfalse;
- }
- }
- #endregion
- 是否Time类型(表示时间部分HHMMSS):范围在夜12:00:00到晚上11:59:59之间的时间#region是否Time类型(表示时间部分HHMMSS):范围在夜12:00:00到晚上11:59:59之间的时间
- /**////<summary>
- ///是否Time类型(表示时间部分HHMMSS):范围在夜12:00:00到晚上11:59:59之间的时间
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsTime()
- {
- DateTimeValue;
- try
- {
- Value=DateTime.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- if(Value.Year==1&&Value.Month==1&&Value.Day==1)
- {
- returntrue;
- }
- else
- {
- returnfalse;
- }
- }
- #endregion
- 是否IPAddress类型(IPv4的情况下使用以点分隔的四部分表示法格式表示,IPv6的情况下使用冒号与十六进制格式表示)#region是否IPAddress类型(IPv4的情况下使用以点分隔的四部分表示法格式表示,IPv6的情况下使用冒号与十六进制格式表示)
- /**////<summary>
- ///是否IPAddress类型(IPv4的情况下使用以点分隔的四部分表示法格式表示,IPv6的情况下使用冒号与十六进制格式表示)
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsIPAddress()
- {
- try
- {
- System.Net.IPAddress.Parse(_String);
- }
- catch
- {
- returnfalse;
- }
- returntrue;
- }
- #endregion
- 是否中国电话号码类型(XXX/XXXX-XXXXXXX/XXXXXXXX(\d{3,4})-?\d{7,8}):判断是否是(区号:3或4位)-(电话号码:7或8位)#region是否中国电话号码类型(XXX/XXXX-XXXXXXX/XXXXXXXX(\d{3,4})-?\d{7,8}):判断是否是(区号:3或4位)-(电话号码:7或8位)
- /**////<summary>
- ///是否中国电话号码类型(XXX/XXXX-XXXXXXX/XXXXXXXX(\d{3,4})-?\d{7,8}):判断是否是(区号:3或4位)-(电话号码:7或8位)
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsChinaPhone()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"(\d{3,4})-?\d{7,8}",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否中国邮政编码(6位数字\d{6})#region是否中国邮政编码(6位数字\d{6})
- /**////<summary>
- ///是否中国邮政编码(6位数字\d{6})
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsChinesePostalCode()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"\d{6}",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否中国移动电话号码(13开头的总11位数字13\d{9})#region是否中国移动电话号码(13开头的总11位数字13\d{9})
- /**////<summary>
- ///是否中国移动电话号码(13开头的总11位数字13\d{9})
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsChineseMobile()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"13\d{9}",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否EMail类型(XXX@XXX.XXX\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)#region是否EMail类型(XXX@XXX.XXX\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)
- /**////<summary>
- ///是否EMail类型(XXX@XXX.XXX\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsEmail()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否InternetURL地址类型(http://)#region是否InternetURL地址类型(http://)
- /**////<summary>
- ///是否InternetURL地址类型(http://)
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsURL()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否中文字符([\u4e00-\u9fa5])#region是否中文字符([\u4e00-\u9fa5])
- /**////<summary>
- ///是否中文字符([\u4e00-\u9fa5])
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsChineseWord()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"[\u4e00-\u9fa5]",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否是数字(0到9的数字[\d]+):不包括符号"."和"-"#region是否是数字(0到9的数字[\d]+):不包括符号"."和"-"
- /**////<summary>
- ///是否是数字(0到9的数字[\d]+):不包括符号"."和"-"
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsNumber()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"[\d]+",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否只包含数字,英文和下划线([\w]+)#region是否只包含数字,英文和下划线([\w]+)
- /**////<summary>
- ///是否只包含数字,英文和下划线([\w]+)
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsStringModel_01()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"[\w]+",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否大写首字母的英文字母([A-Z][a-z]+)#region是否大写首字母的英文字母([A-Z][a-z]+)
- /**////<summary>
- ///是否大写首字母的英文字母([A-Z][a-z]+)
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsStringModel_02()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"[A-Z][a-z]+",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否全角字符([^\x00-\xff]):包括汉字在内#region是否全角字符([^\x00-\xff]):包括汉字在内
- /**////<summary>
- ///是否全角字符([^\x00-\xff]):包括汉字在内
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsWideWord()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"[^\x00-\xff]",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否半角字符([\x00-\xff])#region是否半角字符([\x00-\xff])
- /**////<summary>
- ///是否半角字符([^\x00-\xff]):包括汉字在内
- ///</summary>
- ///<returns>Boolean</returns>
- protectedboolIsNarrowWord()
- {
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"[\x00-\xff]",RegexOptions.None,refaryResult,_IsEntirety);
- }
- #endregion
- 是否合法的中国身份证号码#region是否合法的中国身份证号码
- protectedboolIsChineseID()
- {
- if(_String.Length==15)
- {
- _String=CidUpdate(_String);
- }
- if(_String.Length==18)
- {
- stringstrResult=CheckCidInfo(_String);
- if(strResult=="非法地区"||strResult=="非法生日"||strResult=="非法证号")
- {
- returnfalse;
- }
- else
- {
- returntrue;
- }
- }
- else
- {
- returnfalse;
- }
- }
- #endregion
- #endregion
- 通用正则表达式判断函数#region通用正则表达式判断函数
- /**////<summary>
- ///通用正则表达式判断函数
- ///</summary>
- ///<paramname="strVerifyString">String,用于匹配的字符串</param>
- ///<paramname="strRegular">String,正则表达式</param>
- ///<paramname="regOption">RegexOptions,配置正则表达式的选项</param>
- ///<paramname="aryResult">ArrayList,分解的字符串内容</param>
- ///<paramname="IsEntirety">Boolean,是否需要完全匹配</param>
- ///<returns></returns>
- publicboolCommRegularMatch(stringstrVerifyString,stringstrRegular,System.Text.RegularExpressions.RegexOptionsregOption,refSystem.Collections.ArrayListaryResult,boolIsEntirety)
- {
- System.Text.RegularExpressions.Regexr;
- System.Text.RegularExpressions.Matchm;
- 如果需要完全匹配的处理#region如果需要完全匹配的处理
- if(IsEntirety)
- {
- strRegular=strRegular.Insert(0,@"\A");
- strRegular=strRegular.Insert(strRegular.Length,@"\z");
- }
- #endregion
- try
- {
- r=newSystem.Text.RegularExpressions.Regex(strRegular,regOption);
- }
- catch(System.Exceptione)
- {
- throw(e);
- }
- for(m=r.Match(strVerifyString);m.Success;m=m.NextMatch())
- {
- aryResult.Add(m);
- }
- if(aryResult.Count==0)
- {
- returnfalse;
- }
- else
- {
- returntrue;
- }
- }
- #endregion
- 中国身份证号码验证#region中国身份证号码验证
- privatestringCheckCidInfo(stringcid)
- {
- string[]aCity=newstring[]{null,null,null,null,null,null,null,null,null,null,null,"北京","天津","河北","山西","内蒙古",null,null,null,null,null,"辽宁","吉林","黑龙江",null,null,null,null,null,null,null,"上海","江苏","浙江","安微","福建","江西","山东",null,null,null,"河南","湖北","湖南","广东","广西","海南",null,null,null,"重庆","四川","贵州","云南","西藏",null,null,null,null,null,null,"陕西","甘肃","青海","宁夏","新疆",null,null,null,null,null,"台湾",null,null,null,null,null,null,null,null,null,"香港","澳门",null,null,null,null,null,null,null,null,"国外"};
- doubleiSum=0;
- stringinfo=string.Empty;
- System.Text.RegularExpressions.Regexrg=newSystem.Text.RegularExpressions.Regex(@"^\d{17}(\d|x)$");
- System.Text.RegularExpressions.Matchmc=rg.Match(cid);
- if(!mc.Success)
- {
- returnstring.Empty;
- }
- cid=cid.ToLower();
- cid=cid.Replace("x","a");
- if(aCity[int.Parse(cid.Substring(0,2))]==null)
- {
- return"非法地区";
- }
- try
- {
- DateTime.Parse(cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2));
- }
- catch
- {
- return"非法生日";
- }
- for(inti=17;i>=0;i--)
- {
- iSum+=(System.Math.Pow(2,i)%11)*int