C#正则表达式_简单梳理_Emoji表情字符处理
A-最近一直有接触到正则表达式,现对其做简单梳理:private const RegexOptions OPTIONS = RegexOptions.IgnoreCase | RegexOptions.Compiled; ? 备注: public const string EMAIL = @"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$";
[w-]+: 匹配除下划线任意单字字符和"-"组成的字符集,出现1次或多次; (.[w-]+)*:匹配.和除下划线任意单字字符和"-"组成的字符集,出现零次或多次,"."表示对.进行转义,把它当成字符串处理. ?B-20180713遇到关于字符串中Emoji表情字符,添加数据库报错情况:? 使用C#正则表达式获取emoji字符的方式为:? ?Regex.Replace(content,@"p{Cs}","") 备注:"p{Cs}" 匹配unicode字符; 详细说明见:https://technet.microsoft.com/zh-cn/interopmigration/20bw873z(v=vs.100) https://technet.microsoft.com/zh-cn/interopmigration/az24scfc(v=vs.100) ? 主要参考资料地址:?http://www.cnblogs.com/zhangxiaoyong/p/6043283.htmlC# 正则表达式大全?
前言在网上看到一个不错的简易版正则匹配和替换的工具,现在补充进来,感觉还不错,效果如下(输入验证中文汉字的正则表达式) ? ?在线下载? ?密码:5tpt 注:好像也是一位园友写的,但是找不到地址了,有看到的可以留言告知下,thx 文章导读? ? ?正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串。正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法。Regex 类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。 基础梳理说明: 由于在正则表达式中“ ”、“ ? ”、“ * ”、“ ^ ”、“ $ ”、“ + ”、“(”、“)”、“ | ”、“ { ”、“ [ ”等字符已经具有一定特殊意义,如果需要用它们的原始意义,则应该对它进行转义,例如 希 望在字符串中至少有一个“ ”,那么正则表达式应该这么写: + 。 RegEx类常用的方法①静态Match方法
?
使用静态Match方法,可以得到源中第一个匹配模式的连续子串。
?
静态的Match方法有2个重载,分别是
?
Regex.Match(string input,string pattern); Regex.Match(string input,string pattern,RegexOptions options); 第一种重载的参数表示:输入、模式
?
第二种重载的参数表示:输入、模式、RegexOptions枚举的“按位或”组合。
?
RegexOptions枚举的有效值是:
Complied表示编译此模式
CultureInvariant表示不考虑文化背景
ECMAScript表示符合ECMAScript,这个值只能和IgnoreCase、Multiline、Complied连用
ExplicitCapture表示只保存显式命名的组
IgnoreCase表示不区分输入的大小写
IgnorePatternWhitespace表示去掉模式中的非转义空白,并启用由#标记的注释
Multiline表示多行模式,改变元字符^和$的含义,它们可以匹配行的开头和结尾
None表示无设置,此枚举项没有意义
RightToLeft表示从右向左扫描、匹配,这时,静态的Match方法返回从右向左的第一个匹配
Singleline表示单行模式,改变元字符.的意义,它可以匹配换行符
?
注意:Multiline在没有ECMAScript的情况下,可以和Singleline连用。Singleline和Multiline不互斥,但是和ECMAScript互斥。
?
?
②静态的Matches方法
?
这个方法的重载形式同静态的Match方法,返回一个MatchCollection,表示输入中,匹配模式的匹配的集合。
?
?
③静态的IsMatch方法
?
此方法返回一个bool,重载形式同静态的Matches,若输入中匹配模式,返回true,否则返回false。
可以理解为:IsMatch方法,返回Matches方法返回的集合是否为空。
RegEx类的实例⑴字符串替换 //例如我想把如下格式记录中的NAME值修改为WANG string line = "ADDR=1234;NAME=ZHANG;PHONE=6789"; Regex reg = new Regex("NAME=(.+);"); string modified = reg.Replace(line,"NAME=WANG;"); //修改后的字符串为 ADDR=1234;NAME=WANG;PHONE=6789 ⑵字符串匹配 string line = "ADDR=1234;NAME=ZHANG;PHONE=6789"; Regex reg = new Regex("NAME=(.+);"); //例如我想提取line中的NAME值 Match match = reg.Match(line); string value = match.Groups[1].Value; Console.WriteLine("value的值为:{0}",value); ⑶Match实例 //文本中含有"speed=30.3mph",需要提取该速度值,但是速度的单位可能是公制也可能是英制,mph,km/h,m/s都有可能;另外前后可能有空格。 string line = "lane=1;speed=30.3mph;acceleration=2.5mph/s"; Regex reg = new Regex(@"speeds*=s*([d.]+)s*(mph|km/h|m/s)*"); Match match = reg.Match(line); //那么在返回的结果中match.Groups[1].Value将含有数值,而match.Groups[2].Value将含有单位。 var 值 = match.Groups[1].Value;//此处方便演示,在实际开发中请勿使用中文命名变量 var 单位 = match.Groups[2].Value; Console.WriteLine("speed的值为:{0} speed的单位是:{1}",值,单位); ⑷解码gps的GPRMC字符串 //就可以获得经度、纬度值,而以前需要几十行代码。 Regex reg = new Regex(@"^$GPRMC,[d.]*,[A|V],(-?[0-9]*.?[0-9]+),([NS]*),([EW]*),.*"); ⑸提取[]的值 string pattern1 = @"(?is)(?<=[)(.*)(?=])"; string result1 = new Regex(pattern1).Match("sadff[xxx]sdfdsf").Value; ⑹提取()的值 string pattern2 = @"(?is)(?<=()(.*)(?=))"; string result2 = new Regex(pattern2).Match("sad(f)dsf").Value; ⑺提取()的值 string pattern3 = @"(?is)(?<={)(.*)(?=})"; string result3 = new Regex(pattern3).Match("sadff[{xxx]sdfd}sf").Value; ? 命名空间说明System.Text.RegularExpressions命名空间的说明 该名称空间包括8个类,1个枚举,1个委托。他们分别是:? Capture: 包含一次匹配的结果; CaptureCollection: Capture的序列; Group: 一次组记录的结果,由Capture继承而来; GroupCollection:表示捕获组的集合 Match: 一次表达式的匹配结果,由Group继承而来; MatchCollection: Match的一个序列; MatchEvaluator: 执行替换操作时使用的委托; RegexCompilationInfo:提供编译器用于将正则表达式编译为独立程序集的信息 RegexOptions 提供用于设置正则表达式的枚举值 Regex类中还包含一些静态的方法: Escape: 对字符串中的regex中的转义符进行转义; IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值; Match: 返回Match的实例; Matches: 返回一系列的Match的方法; Replace: 用替换字符串替换匹配的表达式; Split: 返回一系列由表达式决定的字符串; Unescape:不对字符串中的转义字符转义。 正则常用表达式?㈠校验数字的表达式//数字 Regex reg = new Regex(@"^[0-9]*$"); //n位的数字 Regex reg = new Regex(@"^d{n}$"); //至少n位的数字 Regex reg = new Regex(@"^d{n,}$"); //m-n位的数字 Regex reg = new Regex(@"^d{m,n}$"); //零和非零开头的数字 Regex reg = new Regex(@"^(0|[1-9][0-9]*)$"); //非零开头的最多带两位小数的数字 Regex reg = new Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$"); //带1-2位小数的正数或负数 Regex reg = new Regex(@"^(-)?d+(.d{1,2})?$"); //正数、负数、和小数 Regex reg = new Regex(@"^(-|+)?d+(.d+)?$"); //有两位小数的正实数 Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$"); //有1~3位小数的正实数 Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,3})?$"); //非零的正整数 Regex reg = new Regex(@"^[1-9]d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^+?[1-9][0-9]*$"); //非零的负整数 Regex reg = new Regex(@"^-[1-9][]0-9″*$ 或 ^-[1-9]d*$"); //非负整数 Regex reg = new Regex(@"^d+$ 或 ^[1-9]d*|0$"); //非正整数 Regex reg = new Regex(@"^-[1-9]d*|0$ 或 ^((-d+)|(0+))$"); //非负浮点数 Regex reg = new Regex(@"^d+(.d+)?$ 或 ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$"); //非正浮点数 Regex reg = new Regex(@"^((-d+(.d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$"); //正浮点数 Regex reg = new Regex(@"^[1-9]d*.d*|0.d*[1-9]d*$ 或 ^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$"); //负浮点数 Regex reg = new Regex(@"^-([1-9]d*.d*|0.d*[1-9]d*)$ 或 ^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$"); //浮点数 Regex reg = new Regex(@"^(-?d+)(.d+)?$ 或 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$"); ㈡校验字符的表达式//汉字 Regex reg = new Regex(@"^[u4e00-u9fa5]{0,}$"); //英文和数字 Regex reg = new Regex(@"^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$"); //长度为3-20的所有字符 Regex reg = new Regex(@"^.{3,20}$"); //由26个英文字母组成的字符串 Regex reg = new Regex(@"^[A-Za-z]+$"); //由26个大写英文字母组成的字符串 Regex reg = new Regex(@"^[A-Z]+$"); //由26个小写英文字母组成的字符串 Regex reg = new Regex(@"^[a-z]+$"); //由数字和26个英文字母组成的字符串 Regex reg = new Regex(@"^[A-Za-z0-9]+$"); //由数字、26个英文字母或者下划线组成的字符串 Regex reg = new Regex(@"^w+$ 或 ^w{3,20}$"); //中文、英文、数字包括下划线 Regex reg = new Regex(@"^[u4E00-u9FA5A-Za-z0-9_]+$"); //中文、英文、数字但不包括下划线等符号 Regex reg = new Regex(@"^[u4E00-u9FA5A-Za-z0-9]+$ 或 ^[u4E00-u9FA5A-Za-z0-9]{2,20}$"); //可以输入含有^%&’,;=?$”等字符 Regex reg = new Regex(@"[^%&’,;=?$x22]+"); //禁止输入含有~的字符 Regex reg = new Regex(@"[^~x22]+"); ㈢特殊需求表达式//Email地址 Regex reg = new Regex(@"^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$"); //域名 Regex reg = new Regex(@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?"); //InternetURL Regex reg = new Regex(@"[a-zA-z]+://[^s]* 或 ^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$"); //手机号码 Regex reg = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$"); //电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX) Regex reg = new Regex(@"^($$d{3,4}-)|d{3.4}-)?d{7,8}$"); //国内电话号码(0511-4405222、021-87888822) Regex reg = new Regex(@"d{3}-d{8}|d{4}-d{7}"); //身份证号(15位、18位数字) Regex reg = new Regex(@"^d{15}|d{18}$"); //短身份证号码(数字、字母x结尾) Regex reg = new Regex(@"^([0-9]){7,18}(x|X)?$ 或 ^d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$"); //帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线) Regex reg = new Regex(@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$"); //密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线) Regex reg = new Regex(@"^[a-zA-Z]w{5,17}$"); //强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间) Regex reg = new Regex(@"^(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$"); //日期格式 Regex reg = new Regex(@"^d{4}-d{1,2}-d{1,2}"); //一年的12个月(01~09和1~12) Regex reg = new Regex(@"^(0?[1-9]|1[0-2])$"); //一个月的31天(01~09和1~31) Regex reg = new Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$"); //钱的输入格式: //有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00”,和没有 “分” 的 “10000” 和 “10,000” Regex reg = new Regex(@"^[1-9][0-9]*$"); //这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式 Regex reg = new Regex(@"^(0|[1-9][0-9]*)$"); //一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号 Regex reg = new Regex(@"^(0|-?[1-9][0-9]*)$"); //这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分 Regex reg = new Regex(@"^[0-9]+(.[0-9]+)?$"); //必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的 Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$"); //这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样 Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,2})?$"); //这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样 Regex reg = new Regex(@"^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$"); //1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须 Regex reg = new Regex(@"^([0-9]+|[0-9]{1,[0-9]{3})*)(.[0-9]{1,2})?$"); //备注:这就是最终结果了,别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里 //xml文件 Regex reg = new Regex(@"^([a-zA-Z]+-?)+[a-zA-Z0-9]+.[x|X][m|M][l|L]$"); //中文字符的正则表达式 Regex reg = new Regex(@"[u4e00-u9fa5]"); //双字节字符 Regex reg = new Regex(@"[^x00-xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))"); //空白行的正则表达式,可用来删除空白行 Regex reg = new Regex(@"ns*r"); //HTML标记的正则表达式 Regex reg = new Regex(@"<(S*?)[^>]*>.*?</1>|<.*? />");// (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力) //首尾空白字符的正则表达式 Regex reg = new Regex(@"^s*|s*$或(^s*)|(s*$)");// (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式) //腾讯QQ号 Regex reg = new Regex(@"[1-9][0-9]{4,}"); //(腾讯QQ号从10000开始) //中国邮政编码 Regex reg = new Regex(@"[1-9]d{5}(?!d)");// (中国邮政编码为6位数字) //IP地址 Regex reg = new Regex(@"d+.d+.d+.d+");// (提取IP地址时有用) //IP地址 Regex reg = new Regex(@"((?:(?:25[0-5]|2[0-4]d|[01]?d?d).){3}(?:25[0-5]|2[0-4]d|[01]?d?d))"); 使用demo正则的使用可以分为验证方法和匹配方法两种 因上文对正则已经做了比较详细的讲解,故在此不多做赘述,直接贴出使用demo 1 class Validator 2 2 { 3 3 #region 匹配方法 4 4 <summary> 5 5 验证字符串是否匹配正则表达式描述的规则 6 6 </summary> 7 7 <param name="inputStr">待验证的字符串</param> 8 8 <param name="patternStr">正则表达式字符串 9 9 <returns>是否匹配</returns> 10 10 bool IsMatch(string inputStr, patternStr) 11 11 { 12 12 return IsMatch(inputStr,patternStr,1)">false,1)">); 13 13 } 14 14 15 15 16 16 17 17 18 18 19 19 20 20 <param name="ifIgnoreCase">匹配时是否不区分大小写 21 21 22 22 string patternStr,1)">bool ifIgnoreCase) 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 <param name="ifValidateWhiteSpace">是否验证空白字符串 33 33 34 34 ifValidateWhiteSpace) 35 35 36 36 ,ifValidateWhiteSpace); 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 bool ifIgnoreCase,1)"> 48 48 49 49 if (!ifValidateWhiteSpace && string.IsNullOrWhiteSpace(inputStr))//.NET 4.0 新增IsNullOrWhiteSpace 方法,便于对用户做处理 50 50 false;如果不要求验证空白字符串而此时传入的待验证字符串为空白字符串,则不匹配 51 51 Regex regex = null 52 52 if (ifIgnoreCase) 53 53 regex = new Regex(patternStr,RegexOptions.IgnoreCase);指定不区分大小写的匹配 54 54 else 55 55 regex = new Regex(patternStr); 56 56 regex.IsMatch(inputStr); 57 57 58 58 #endregion 59 59 60 60 #region 验证方法 61 61 62 62 验证数字(double类型) 63 63 [可以包含负号和小数点] 64 64 65 65 <param name="input"> 66 66 67 67 bool IsNumber( input) 68 68 69 69 string pattern = @"^-?d+$|^(-?d+)(.d+)?$"; 70 70 return IsMatch(input,pattern); 71 71 double d = 0 72 72 double.TryParse(input,1)">out d)) 73 73 true 74 74 75 75 76 76 77 77 78 78 79 79 验证整数 80 80 81 81 82 82 83 83 bool IsInteger( 84 84 85 85 string pattern = @"^-?d+$"; 86 86 87 87 int i = 88 88 int.TryParse(input,1)"> i)) 89 89 90 90 91 91 92 92 93 93 94 94 95 95 验证非负整数 96 96 97 97 98 98 99 99 bool IsIntegerNotNagtive(100 100101 101 string pattern = @"^d+$"; 102 102 103 103 int i = -1104 104 out i) && i >= ) 105 105 106 106 107 107 108 108109 109 110 110 111 111 验证正整数 112 112 113 113 114 114 115 115 bool IsIntegerPositive(116 116117 117 string pattern = @"^[0-9]*[1-9][0-9]*$"; 118 118 119 119 120 120 121 121 122 122 123 123 124 124125 125 126 126 127 127 验证小数 128 128 129 129 130 130 131 131 bool IsDecimal(132 132133 133 string pattern = ^([-+]?[1-9]d*.d+|-?0.d*[1-9]d*)$134 134 IsMatch(input,pattern); 135 135136 136 137 137 138 138 验证只包含英文字母 139 139 140 140 141 141 142 142 bool IsEnglishCharacter(143 143144 144 ^[A-Za-z]+$145 145 146 146147 147 148 148 149 149 验证只包含数字和英文字母 150 150 151 151 152 152 153 153 bool IsIntegerAndEnglishCharacter(154 154155 155 ^[0-9A-Za-z]+$156 156 157 157158 158 159 159 160 160 验证只包含汉字 161 161 162 162 163 163 164 164 bool IsChineseCharacter(165 165166 166 ^[u4e00-u9fa5]+$167 167 168 168169 169 170 170 171 171 验证数字长度范围(数字前端的0计长度) 172 172 [若要验证固定长度,可传入相同的两个长度数值] 173 173 174 174 175 175 <param name="lengthBegin">长度范围起始值(含)176 176 <param name="lengthEnd">长度范围结束值(含)177 177 178 178 bool IsIntegerLength(string input,1)">int lengthBegin,1)">int lengthEnd) 179 179180 180 string pattern = @"^d{" + lengthBegin + "," + lengthEnd + "}$"; 181 181 182 182 if (input.Length >= lengthBegin && input.Length <=183 183 { 184 184 i; 185 185 186 186 187 187 188 188 189 189 } 190 190 191 191 192 192193 193 194 194 195 195 验证字符串包含内容 196 196 197 197 198 198 <param name="withEnglishCharacter">是否包含英文字母199 199 <param name="withNumber">是否包含数字200 200 <param name="withChineseCharacter">是否包含汉字201 201 202 202 bool IsStringInclude(bool withEnglishCharacter,1)">bool withNumber,1)"> withChineseCharacter) 203 203204 204 if (!withEnglishCharacter && !withNumber && !withChineseCharacter) 205 205 如果英文字母、数字和汉字都没有,则返回false 206 206 StringBuilder patternString = StringBuilder(); 207 207 patternString.Append("^[208 208 (withEnglishCharacter) 209 209 patternString.Append(a-zA-Z210 210 (withNumber) 211 211 patternString.Append(0-9212 212 (withChineseCharacter) 213 213 patternString.Append(u4E00-u9FA5214 214 patternString.Append(]+$215 215 216 216217 217 218 218 219 219 验证字符串长度范围 220 220 221 221 222 222 223 223 224 224 225 225 226 226 bool IsStringLength(227 227228 228 string pattern = @"^.{" + lengthBegin + ",1)">229 229 230 230 231 231 232 232 233 233 234 234235 235 236 236 237 237 验证字符串长度范围(字符串内只包含数字和/或英文字母) 238 238 239 239 240 240 241 241 242 242 243 243 244 244 bool IsStringLengthOnlyNumberAndEnglishCharacter(245 245246 246 ^[0-9a-zA-z]{" + lengthBegin + " + lengthEnd + }$247 247 248 248249 249 250 250 251 251 252 252 253 253 254 254 255 255 256 256 257 257 258 258 259 259 260 260 261 261 bool IsStringLengthByInclude(bool withChineseCharacter,1)">262 262263 263 264 264 265 265 StringBuilder patternString = 266 266 patternString.Append(267 267 268 268 patternString.Append(269 269 270 270 patternString.Append(271 271 272 272 patternString.Append(273 273 patternString.Append(]{274 274 275 275276 276 277 277 278 278 验证字符串字节数长度范围 279 279 [若要验证固定长度,可传入相同的两个长度数值;每个汉字为两个字节长度] 280 280 281 281 282 282 283 283 284 284 <returns></returns> 285 285 bool IsStringByteLength(286 286287 287 int byteLength = Regex.Replace(input,@"[^x00-xff]","ok").Length; 288 288 if (byteLength >= lengthBegin && byteLength <= lengthEnd) 289 289 { 290 290 return true; 291 291 } 292 292 return false; 293 293 int byteLength = Encoding.Default.GetByteCount(input); 294 294 if (byteLength >= lengthBegin && byteLength <=295 295 296 296 297 297 298 298299 299 300 300 301 301 验证日期 302 302 303 303 304 304 305 305 bool IsDateTime(306 306307 307 DateTime dt; 308 308 if (DateTime.TryParse(input,1)"> dt)) 309 309 310 310 311 311 312 312313 313 314 314 315 315 验证固定电话号码 316 316 [3位或4位区号;区号可以用小括号括起来;区号可以省略;区号与本地号间可以用减号或空格隔开;可以有3位数的分机号,分机号前要加减号] 317 317 318 318 319 319 320 320 bool IsTelePhoneNumber(321 321322 322 ^(((0d2|0d{2})[- ]?)?d{8}|((0d3|0d{3})[- ]?)?d{7})(-d{3})?$323 323 324 324325 325 326 326 327 327 验证手机号码 328 328 [可匹配"(+86)013325656352",括号可以省略,+号可以省略,(+86)可以省略,11位手机号前的0可以省略;11位手机号第二位数可以是3、4、5、8中的任意一个] 329 329 330 330 331 331 332 332 bool IsMobilePhoneNumber(333 333334 334 ^((+)?86|((+)?86)?)0?1[3458]d{9}$335 335 336 336337 337 338 338 339 339 验证电话号码(可以是固定电话号码或手机号码) 340 340 [固定电话:[3位或4位区号;区号可以用小括号括起来;区号可以省略;区号与本地号间可以用减号或空格隔开;可以有3位数的分机号,分机号前要加减号]] 341 341 [手机号码:[可匹配"(+86)013325656352",括号可以省略,+号可以省略,(+86)可以省略,手机号前的0可以省略;手机号第二位数可以是3、4、5、8中的任意一个]] 342 342 343 343 344 344 345 345 bool IsPhoneNumber(346 346347 347 ^((+)?86|((+)?86)?)0?1[3458]d{9}$|^(((0d2|0d{2})[- ]?)?d{8}|((0d3|0d{3})[- ]?)?d{7})(-d{3})?$348 348 349 349350 350 351 351 352 352 验证邮政编码 353 353 354 354 355 355 356 356 bool IsZipCode(357 357358 358 string pattern = @"^d{6}$"; 359 359 360 360 if (input.Length != 6361 361 362 362 363 363 364 364 365 365 366 366 367 367368 368 369 369 370 370 验证电子邮箱 371 371 [@字符前可以包含字母、数字、下划线和点号;@字符后可以包含字母、数字、下划线和点号;@字符后至少包含一个点号且点号不能是最后一个字符;最后一个点号后只能是字母或数字] 372 372 373 373 374 374 375 375 376 376377 377 /邮箱名以数字或字母开头;邮箱名可由字母、数字、点号、减号、下划线组成;邮箱名(@前的字符)长度为3~18个字符;邮箱名不能以点号、减号或下划线结尾;不能出现连续两个或两个以上的点号、减号。 378 378 string pattern = @"^[a-zA-Z0-9]((?<!(..|--))[a-zA-Z0-9._-]){1,16}[a-zA-Z0-9]@([0-9a-zA-Z][0-9a-zA-Z-]{0,62}.)+([0-9a-zA-Z][0-9a-zA-Z-]{0,62}).?|((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$"; 379 379 ^([w-.]+)@([w-.]+)(.[a-zA-Z0-9]+)$380 380 381 381382 382 383 383 384 384 验证网址(可以匹配IPv4地址但没对IPv4地址进行格式验证;IPv6暂时没做匹配) 385 385 [允许省略"://";可以添加端口号;允许层级;允许传参;域名中至少一个点号且此点号前要有内容] 386 386 387 387 388 388 389 389 bool IsURL(390 390391 391 /每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,单个域长度不超过63,完整的域名全长不超过256个字符。在DNS系统中,全名是以一个点“.”来结束的,例如“www.nit.edu.cn.”。没有最后的那个点则表示一个相对地址。 392 392 /没有例如"http://"的前缀,没有传参的匹配 393 393 string pattern = @"^([0-9a-zA-Z][0-9a-zA-Z-]{0,62}).?$"; 394 394 395 395 string pattern = @"^(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp):)|(www.))+(([a-zA-Z0-9._-]+.[a-zA-Z]{2,6})|([0-9]{1,3}.[0-9]{1,3}))(/[a-zA-Z0-9&;%_./-~-]*)?$"; 396 396 ^([a-zA-Z]+://)?([w-.]+)(.[a-zA-Z0-9]+)(:d{0,5})?/?([w-/]*).?([a-zA-Z]*)??(([w-]*=[w%]*&?)*)$397 397 398 398399 399 400 400 401 401 验证IPv4地址 402 402 [第一位和最后一位数字不能是0或255;允许用0补位] 403 403 404 404 405 405 406 406 bool IsIPv4(407 407408 408 string pattern = @"^(25[0-4]|2[0-4]d]|[01]?d{2}|[1-9]).(25[0-5]|2[0-4]d]|[01]?d?d).(25[0-5]|2[0-4]d]|[01]?d?d).(25[0-4]|2[0-4]d]|[01]?d{2}|[1-9])$"; 409 409 410 410 string[] IPs = input.Split('.'411 411 if (IPs.Length != 4412 412 413 413 int n = -414 414 for (0; i < IPs.Length; i++415 415416 416 if (i == 0 || i == 3417 417 { 418 418 int.TryParse(IPs[i],1)">out n) && n > 0 && n < 255419 419 continue420 420 421 421 422 422 } 423 423 424 424425 425 out n) && n >= 0 && n <= 426 426 427 427 428 428 429 429430 430431 431 432 432433 433 434 434 435 435 验证IPv6地址 436 436 [可用于匹配任何一个合法的IPv6地址] 437 437 438 438 439 439 440 440 bool IsIPv6(441 441442 442 ^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,5})|((:[0-9A-Fa-f]{1,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,6})|((:[0-9A-Fa-f]{1,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,7})|((:[0-9A-Fa-f]{1,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*$443 443 444 444445 445 446 446 447 447 身份证上数字对应的地址 448 448 449 449 enum IDAddress 450 450 451 451 北京 = 11,天津 = 12,河北 = 13,山西 = 14,内蒙古 = 15,辽宁 = 21,吉林 = 22,黑龙江 = 23,上海 = 31,江苏 = 32,浙江 = 33, 452 452 安徽 = 34,福建 = 35,江西 = 36,山东 = 37,河南 = 41,湖北 = 42,湖南 = 43,广东 = 44,广西 = 45,海南 = 46,重庆 = 50,四川 = 51,1)">453 453 贵州 = 52,云南 = 53,西藏 = 54,陕西 = 61,甘肃 = 62,青海 = 63,宁夏 = 64,新疆 = 65,台湾 = 71,香港 = 81,澳门 = 82,国外 = 91 454 454 455 455 456 456 457 457 验证一代身份证号(15位数) 458 458 [长度为15位的数字;匹配对应省份地址;生日能正确匹配] 459 459 460 460 461 461 462 462 bool IsIDCard15(463 463464 464 验证是否可以转换为15位整数 465 465 long l = 466 466 if (!long.TryParse(input,1)">out l) || l.ToString().Length != 15467 467468 468 469 469470 470 验证省份是否匹配 471 471 1~6位为地区代码,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。 472 472 string address = 11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91,1)">473 473 if (!address.Contains(input.Remove(2) + )) 474 474475 475 476 476477 477 验证生日是否匹配 478 478 string birthdate = input.Substring(6,6).Insert(4,1)">/").Insert(2,1)">479 479480 480 if (!DateTime.TryParse(birthdate,1)">481 481482 482 483 483484 484 485 485486 486 487 487 488 488 验证二代身份证号(18位数,GB11643-1999标准) 489 489 [长度为18位;前17位为数字,最后一位(校验码)可以为大小写x;匹配对应省份地址;生日能正确匹配;校验码能正确匹配] 490 490 491 491 492 492 493 493 bool IsIDCard18(494 494495 495 验证是否可以转换为正确的整数 496 496 497 497 long.TryParse(input.Remove(17),1)">17 || !long.TryParse(input.Replace(x',1)">0').Replace(X'),1)"> l)) 498 498499 499 500 500501 501 502 502 503 503 504 504 505 505506 506 507 507508 508 509 509 8).Insert(510 510511 511 512 512513 513 514 514515 515 校验码验证 516 516 校验码: 517 517 (1)十七位数字本体码加权求和公式 518 518 S = Sum(Ai * Wi),i = 0,...,16 ,先对前17位数字的权求和 519 519 Ai:表示第i位置上的身份证号码数字值 520 520 Wi:表示第i位置上的加权因子 521 521 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 522 522 (2)计算模 523 523 Y = mod(S,11) 524 524 (3)通过模得到对应的校验码 525 525 Y: 0 1 2 3 4 5 6 7 8 9 10 526 526 校验码: 1 0 X 9 8 7 6 5 4 3 2 527 527 string[] arrVarifyCode = (1,x,9,8,7,6,5,4,3,2").Split(528 528 string[] Wi = (7,10,2,1,1)">529 529 char[] Ai = input.Remove(17).ToCharArray(); 530 530 int sum = 531 531 0; i < 17; i++532 532533 533 sum += int.Parse(Wi[i]) * .Parse(Ai[i].ToString()); 534 534535 535 int y = -536 536 Math.DivRem(sum,1)">11,1)"> y); 537 537 if (arrVarifyCode[y] != input.Substring(17,1)">).ToLower()) 538 538539 539 540 540541 541 542 542543 543 544 544 545 545 验证身份证号(不区分一二代身份证号) 546 546 547 547 548 548 549 549 bool IsIDCard(550 550551 551 if (input.Length == 18552 552 IsIDCard18(input); 553 553 else 554 554 IsIDCard15(input); 555 555 556 556 557 557558 558 559 559 560 560 验证经度 561 561 562 562 563 563 564 564 bool IsLongitude(565 565566 566 /范围为-180~180,小数位数必须是1到5位 567 567 string pattern = @"^[-+]?((1[0-7]d{1}|0?d{1,2}).d{1,5}|180.0{1,5})$"; 568 568 569 569 float lon; 570 570 float.TryParse(input,1)">out lon) && lon >= -180 && lon <= 180571 571 572 572 573 573 574 574575 575 576 576 577 577 验证纬度 578 578 579 579 580 580 581 581 bool IsLatitude(582 582583 583 /范围为-90~90,小数位数必须是1到5位 584 584 string pattern = @"^[-+]?([0-8]?d{1}.d{1,5}|90.0{1,1)">585 585 586 586 lat; 587 587 out lat) && lat >= -90 && lat <= 90588 588 589 589 590 590 591 591592 592 593 593 } ? ?注:感谢?Sam Xiao?对RegEx类的实例用法作出补充 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 通过在弹性beanstalk的负载均衡器中的IIS重写到
- asp.net – 如何使用嵌套的视图模型获取EditorFor的数据
- asp.net – 如何在MVC 4中查询当前登录用户的AD信息
- asp.net-mvc – 缓存直到ASP.NET MVC和Entity Framework 4.
- asp.net-mvc-3 – 检查ViewBag是否具有属性,以有条件地注入
- asp-classic – 从Classic ASP执行存储过程
- asp.net-mvc – MVC – 索引视图溢出
- asp.net 将一个图片以二进制值的形式存入Xml文件中的实例代
- asp.net – 验证失败后如何防止页面跳转到顶部位置?
- asp.net – IIS7:禁用子应用程序中的HttpModule – 站点,应
- asp.net – CheckBoxList滚动条
- asp.net – JMeter测试ASP .NET网页有多好?
- asp.net-mvc – Web场中的nHibernate策略
- asp.net-mvc-4 – 附加到HTTP响应的CORS标头未发
- asp.net应用程序中的内存泄漏 – W3WP和第2代堆继
- asp.net – 在web用户控件中传递int数组作为参数
- asp.net-mvc-3 – System.ComponentModel.DataAn
- asp.net-mvc – 如何在Kendo模板中动态设置列
- asp.net – 自定义HttpModule在IIS7中集成,但不是
- asp.net-mvc – 如何在IIS 5.1上部署MVC App?