关于正则表达式
关于正则表达式这个知识点,没必要时时牢记每一个规则,但是在用的时候,你必须能够快速写出来,这就需要做好笔记能随时查看。如果因没写笔记而写不出来,那只能是你自己活该倒霉了。
关于正则表达式最基本的规则,今天只做简单的介绍,以后再做整理:
1、英文字母:[a-zA-Z]
2、数字:[0-9]或者\d
3、中文:[\u4E00-\u9FA5],中文在这里使用unicode编码匹配的。
4、空格:\s可以表示所有的空白字符,但是如果指定全角空格、半角空格、tab键等等,这个时候\s显然不能满足要求,这个时候可以通过unicode编码来匹配。在下面的地址中就可以进行匹配http://tool.chinaz.com/Tools/Unicode.aspx。半角空格对应的unicode编码是\u0020。
5、半角/,两个半角/表示注释,所以在匹配它的时候注意转义,在Js中用'\'来转义,在C#中用@或者/来转义。
6、对于一些特殊字符,比如剧中点'·',直接写上就行。
这是关于正则表达式的一些基本规则。下面说一下应用。
正则表达式主要用来匹配和提取。
一、在js中
1、看字符串是否匹配
var reg = /^(·|/|\/|\u0020|[\u4E00-\u9FA5]|[a-zA-Z0-9]){0,20}$/; //看字符串是否匹配 if (reg.test(categoryName)) { return true; }
2、将匹配的字符串替换为
var reg = /[0-9]/; categoryName = categoryName.replace(reg,'');
3、从字符串中提取匹配的字符
var reg = /(·|/|\/|\u0020|[\u4E00-\u9FA5]|[a-zA-Z0-9]){0,20}/; var matchArr = categoryName.match(reg); categoryName = ''; for (var i = 0; i < matchArr.length; i++) { categoryName += matchArr[i]; }
以上是在js中的使用方法。下面介绍在C#中的使用方法
二、在C#中
1、是否匹配
private bool CheckCategoryName(string categoryName, out string ErrMessage) { bool IsRight = true; ErrMessage = ""; string regexStr = @"^(·|/|/|\u0020|[\u4E00-\u9FA5]|[a-zA-Z0-9]){0,20}$"; if (Regex.IsMatch(categoryName, regexStr)) { if (categoryName.Length == 0) { IsRight = false; ErrMessage = "种类名称不能为空"; } } else { IsRight = false; ErrMessage = "1-20个字符,除汉字、英文字母(不区分大小写)、数字外,仅支持全角半角的“/”、半角空格(英语学科常用)、居中点"; } return IsRight; }
2、过滤不合法的字符
private void GetCategoryName(ref string categoryName) { //过滤掉不合法的字符 MatchCollection mat = Regex.Matches(categoryName, @"(·|/|/|\u0020|[\u4E00-\u9FA5]|[a-zA-Z0-9]){0,20}"); categoryName = ""; foreach (Match item in mat) { if (item.Success) { categoryName += item.Value; } } //将全角/替换为半角/ categoryName = categoryName.Replace("/", "/"); }