- usingSystem;
- usingSystem.Collections;
- usingSystem.Text.RegularExpressions;
- namespaceXrinehart.Framework.Common.Validate
- {
- /**////<summary>
- ///RegularMatch的摘要说明。
- ///</summary>
- publicclassRegularMatch
- {
- privatestring_String;
- bool_IsEntirety;
- ///可以进行判断的类型
- enumOperation
- 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用于判断字符串是否是对应类型(默认为包含匹配)
- boolIsAccordType(stringstrVerifyString,Operationop)
- returnIsAccordType(strVerifyString,op,false);
- }
- #endregion
- 用于判断字符串是否是对应类型(或是否包含对应类型的字符)#region用于判断字符串是否是对应类型(或是否包含对应类型的字符)
- ///用于判断字符串是否是对应类型
- ///<paramname="strVerifyString">String,需要判断的字符串</param>
- ///<paramname="op">Operation枚举,用于选择需要进行的操作</param>
- ///<paramname="IsEntirety">Boolean,判断是完全匹配还是包含匹配模式(仅适用于非类型判断时)</param>
- ///<returns></returns>
- 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
- false;
- true;
- 是否SByte类型(8位的有符号整数):-128到+127之间的整数#region是否SByte类型(8位的有符号整数):-128到+127之间的整数
- ///是否SByte类型(8位的有符号整数):-128到+127之间的整数
- ///<returns>Boolean</returns>
- boolIsSByte()
- try
- SByte.Parse(_String);
- catch
- true;
- 是否Int16类型(16位的有符号整数):-32768到+32767之间的有符号整数#region是否Int16类型(16位的有符号整数):-32768到+32767之间的有符号整数
- ///是否Int16类型(16位的有符号整数):-32768到+32767之间的有符号整数
- boolIsInt16()
- Int16.Parse(_String);
- 是否Int32类型(32位的有符号整数):-2,147,483,648到+2,647之间的有符号整数#region是否Int32类型(32位的有符号整数):-2,647之间的有符号整数
- ///是否Int32类型(32位的有符号整数):-2,647之间的有符号整数
- boolIsInt32()
- Int32.Parse(_String);
- 是否Int64类型(64位的有符号整数):-9,223,372,036,854,775,808到+9,807之间的整数#region是否Int64类型(64位的有符号整数):-9,807之间的整数
- ///是否Int64类型(64位的有符号整数):-9,807之间的整数
- boolIsInt64()
- Int64.Parse(_String);
- 是否Single类型(单精度(32位)浮点数字):-3.402823e38和+3.402823e38之间的单精度32位数字#region是否Single类型(单精度(32位)浮点数字):-3.402823e38和+3.402823e38之间的单精度32位数字
- ///是否Single类型(单精度(32位)浮点数字):-3.402823e38和+3.402823e38之间的单精度32位数字
- boolIsSingle()
- Single.Parse(_String);
- 是否Double类型(单精度(64位)浮点数字):-1.79769313486232e308和+1.79769313486232e308之间的双精度64位数字#region是否Double类型(单精度(64位)浮点数字):-1.79769313486232e308和+1.79769313486232e308之间的双精度64位数字
- ///是否Double类型(单精度(64位)浮点数字):-1.79769313486232e308和+1.79769313486232e308之间的双精度64位数字
- boolIsDouble()
- Double.Parse(_String);
- 是否Boolean类型(布尔值):true或false#region是否Boolean类型(布尔值):false
- ///是否Double类型(单精度(64位)浮点数字):-1.79769313486232e308和+1.79769313486232e308之间的双精度64位数字
- boolIsBoolean()
- Boolean.Parse(_String);
- 是否Char类型(Unicode(16位)字符):该16位数字的值范围为从十六进制值0x0000到0xFFFF#region是否Char类型(Unicode(16位)字符):该16位数字的值范围为从十六进制值0x0000到0xFFFF
- ///是否Char类型(Unicode(16位)字符):该16位数字的值范围为从十六进制值0x0000到0xFFFF
- boolIsChar()
- Char.Parse(_String);
- 是否Char类型(96位十进制值):从正79,228,162,514,264,337,593,543,950,335到负79,335之间的十进制数#region是否Char类型(96位十进制值):从正79,335之间的十进制数
- ///是否Char类型(96位十进制值):从正79,335之间的十进制数
- boolIsDecimal()
- Decimal.Parse(_String);
- 是否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之间的日期和时间
- ///是否DateTime类型(表示时间上的一刻):范围在公元(基督纪元)0001年1月1日午夜12:00:00到公元(C.E.)9999年12月31日晚上11:59:59之间的日期和时间
- boolIsDateTime()
- DateTime.Parse(_String);
- 是否Date类型(表示时间的日期部分):范围在公元(基督纪元)0001年1月1日到公元(C.E.)9999年12月31日之间的日期#region是否Date类型(表示时间的日期部分):范围在公元(基督纪元)0001年1月1日到公元(C.E.)9999年12月31日之间的日期
- ///是否Date类型(表示时间的日期部分):范围在公元(基督纪元)0001年1月1日到公元(C.E.)9999年12月31日之间的日期
- boolIsDate()
- DateTimeValue;
- Value=DateTime.Parse(_String);
- if(Value.Date.ToString()==_String)
- else
- 是否Time类型(表示时间部分HHMMSS):范围在夜12:00:00到晚上11:59:59之间的时间#region是否Time类型(表示时间部分HHMMSS):范围在夜12:00:00到晚上11:59:59之间的时间
- ///是否Time类型(表示时间部分HHMMSS):范围在夜12:00:00到晚上11:59:59之间的时间
- boolIsTime()
- DateTimeValue;
- Value=DateTime.Parse(_String);
- if(Value.Year==1&&Value.Month==1&&Value.Day==1)
- else
- 是否IPAddress类型(IPv4的情况下使用以点分隔的四部分表示法格式表示,IPv6的情况下使用冒号与十六进制格式表示)#region是否IPAddress类型(IPv4的情况下使用以点分隔的四部分表示法格式表示,IPv6的情况下使用冒号与十六进制格式表示)
- ///是否IPAddress类型(IPv4的情况下使用以点分隔的四部分表示法格式表示,IPv6的情况下使用冒号与十六进制格式表示)
- boolIsIPAddress()
- System.Net.IPAddress.Parse(_String);
- 是否中国电话号码类型(XXX/XXXX-XXXXXXX/XXXXXXXX(/d{3,4})-?/d{7,8}):判断是否是(区号:3或4位)-(电话号码:7或8位)#region是否中国电话号码类型(XXX/XXXX-XXXXXXX/XXXXXXXX(/d{3,8}):判断是否是(区号:3或4位)-(电话号码:7或8位)
- ///是否中国电话号码类型(XXX/XXXX-XXXXXXX/XXXXXXXX(/d{3,8}):判断是否是(区号:3或4位)-(电话号码:7或8位)
- boolIsChinaPhone()
- ArrayListaryResult=newArrayList();
- returnCommRegularMatch(_String,@"(/d{3,8}",RegexOptions.None,153); font-weight:bold; background-color:inherit">refaryResult,_IsEntirety);
- 是否中国邮政编码(6位数字/d{6})#region是否中国邮政编码(6位数字/d{6})
- ///是否中国邮政编码(6位数字/d{6})
- boolIsChinesePostalCode()
- "/d{6}",248)"> 是否中国移动电话号码(13开头的总11位数字13/d{9})#region是否中国移动电话号码(13开头的总11位数字13/d{9})
- ///是否中国移动电话号码(13开头的总11位数字13/d{9})
- boolIsChineseMobile()
- "13/d{9}",248)"> 是否EMail类型(XXX@XXX.XXX/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)#region是否EMail类型(XXX@XXX.XXX/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)
- ///是否EMail类型(XXX@XXX.XXX/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)
- boolIsEmail()
- "/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*",248)"> 是否InternetURL地址类型(http://)#region是否InternetURL地址类型(http://)
- ///是否InternetURL地址类型(http://)
- boolIsURL()
- "http://([/w-]+/.)+[/w-]+(/[/w-./?%&=]*)?",248)"> 是否中文字符([/u4e00-/u9fa5])#region是否中文字符([/u4e00-/u9fa5])
- ///是否中文字符([/u4e00-/u9fa5])
- boolIsChineseWord()
- "[/u4e00-/u9fa5]",248)"> 是否是数字(0到9的数字[/d]+):不包括符号"."和"-"#region是否是数字(0到9的数字[/d]+):不包括符号"."和"-"
- ///是否是数字(0到9的数字[/d]+):不包括符号"."和"-"
- boolIsNumber()
- "[/d]+",248)"> 是否只包含数字,英文和下划线([/w]+)#region是否只包含数字,英文和下划线([/w]+)
- ///是否只包含数字,英文和下划线([/w]+)
- boolIsStringModel_01()
- "[/w]+",248)"> 是否大写首字母的英文字母([A-Z][a-z]+)#region是否大写首字母的英文字母([A-Z][a-z]+)
- ///是否大写首字母的英文字母([A-Z][a-z]+)
- boolIsStringModel_02()
- "[A-Z][a-z]+",248)"> 是否全角字符([^/x00-/xff]):包括汉字在内#region是否全角字符([^/x00-/xff]):包括汉字在内
- ///是否全角字符([^/x00-/xff]):包括汉字在内
- boolIsWideWord()
- "[^/x00-/xff]",248)"> 是否半角字符([/x00-/xff])#region是否半角字符([/x00-/xff])
- ///是否半角字符([^/x00-/xff]):包括汉字在内
- boolIsNarrowWord()
- "[/x00-/xff]",248)"> 是否合法的中国身份证号码#region是否合法的中国身份证号码
- boolIsChineseID()
- if(_String.Length==15)
- _String=CidUpdate(_String);
- if(_String.Length==18)
- stringstrResult=CheckCidInfo(_String);
- if(strResult=="非法地区"||strResult=="非法生日"||strResult=="非法证号")
- #endregion
- 通用正则表达式判断函数#region通用正则表达式判断函数
- ///通用正则表达式判断函数
- ///<paramname="strVerifyString">String,用于匹配的字符串</param>
- ///<paramname="strRegular">String,正则表达式</param>
- ///<paramname="regOption">RegexOptions,配置正则表达式的选项</param>
- ///<paramname="aryResult">ArrayList,分解的字符串内容</param>
- ///<paramname="IsEntirety">Boolean,是否需要完全匹配</param>
- ///<returns></returns>
- boolCommRegularMatch(stringstrRegular,System.Text.RegularExpressions.RegexOptionsregOption,153); font-weight:bold; background-color:inherit">refSystem.Collections.ArrayListaryResult,153); font-weight:bold; background-color:inherit">boolIsEntirety)
- System.Text.RegularExpressions.Regexr;
- System.Text.RegularExpressions.Matchm;
- 如果需要完全匹配的处理#region如果需要完全匹配的处理
- if(IsEntirety)
- strRegular=strRegular.Insert(0,@"/A");
- strRegular=strRegular.Insert(strRegular.Length,@"/z");
- 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)
- 中国身份证号码验证#region中国身份证号码验证
- stringCheckCidInfo(stringcid)
- string[]aCity=newstring[]{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)
- string.Empty;
- cid=cid.ToLower();
- cid=cid.Replace("x","a");
- if(aCity[int.Parse(cid.Substring(0,2))]==null)
- return"非法地区";
- DateTime.Parse(cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2));
- return"非法生日";
- for(inti=17;i>=0;i--)
- iSum+=(System.Math.Pow(2,i)%11)*int.Parse(cid[17-i].ToString(),System.Globalization.NumberStyles.HexNumber);
- if(iSum%11!=1)
- return("非法证号");
- return(aCity[","+cid.Substring(6,2)+","+(int.Parse(cid.Substring(16,1))%2==1?"男":"女"));
- 身份证号码15升级为18位#region身份证号码15升级为18位
- stringCidUpdate(stringShortCid)
- char[]strJiaoYan={'1','0','X','9','8','7','6','5','4','3','2'};
- int[]intQuan={7,9,10,5,8,4,2,1,6,3,7,1};
- stringstrTemp;
- intintTemp=0;
- strTemp=ShortCid.Substring(0,6)+"19"+ShortCid.Substring(6);
- inti=0;i<=strTemp.Length-1;i++)
- intTemp+=int.Parse(strTemp.Substring(i,1))*intQuan[i];
- intTemp=intTemp%11;
- returnstrTemp+strJiaoYan[intTemp];
- }