加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

C#正则表达式_简单梳理_Emoji表情字符处理

发布时间:2020-12-16 08:56:07 所属栏目:asp.Net 来源:网络整理
导读:A-最近一直有接触到正则表达式,现对其做简单梳理: private const RegexOptions OPTIONS = RegexOptions.IgnoreCase | RegexOptions.Compiled; public const string EMAIL = @" ^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$ " ; public string URL = ^(http|http

A-最近一直有接触到正则表达式,现对其做简单梳理:

private const RegexOptions OPTIONS = RegexOptions.IgnoreCase | RegexOptions.Compiled;
public
const string EMAIL = @"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$"; public string URL = ^(http|https|ftp|rtsp|mms):(//|\)[A-Za-z0-9%-_@]+.[A-Za-z0-9%-_@]+[A-Za-z0-9./=?%-&_~`@:+!;]*$; /// <summary> /// 判断是否为电子邮件 </summary> <param name="input"></param> <returns></returns> static bool IsEmail(string input) { if (.IsNullOrWhiteSpace(input)) return false; return Regex.IsMatch(input,EMAIL,OPTIONS); } 判断是否为URL bool IsUrl(return Regex.IsMatch(input,URL,OPTIONS); }

?

备注:

public const string EMAIL = @"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$";
[w-]+: 匹配除下划线任意单字字符和"-"组成的字符集,出现1次或多次;
(.[w-]+)*:匹配.和除下划线任意单字字符和"-"组成的字符集,出现零次或多次,"."表示对.进行转义,把它当成字符串处理.

C#中不需要再字符串中使用: /正则/ 包夹正则表达式。

?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.html

C# 正则表达式大全

?

前言

在网上看到一个不错的简易版正则匹配和替换的工具,现在补充进来,感觉还不错,效果如下(输入验证中文汉字的正则表达式)

? ?在线下载? ?密码: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         }
View Code

?

?注:感谢?Sam Xiao?对RegEx类的实例用法作出补充

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读