前提

    公司内部推行安全制度,要求密码必须是八位以上,而且必有至少包含一个小写或者大写字母,数字,特殊字符,面对这样的密码,感觉领导也是够操心的了啊。在公司小编真是闲啊,所以动手实现了一下,后来看了人家的代码,发现自己太low了。

    我就不说那很low的做法了,使用了C#中正则表达式Regex直接进行验证。直接看代码


using System.Text.RegularExpressions;
string s =
@"
(?=.*[0-9]) #必须包含数字
(?=.*[a-zA-Z]) #必须包含小写或大写字母
(?=([\x21-\x7e]+)[^a-zA-Z0-9]) #必须包含特殊符号
.{8,30} #至少8个字符,最多30个字符
";
Regex reg = new Regex(s, RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
if (!reg.IsMatch(textBox1.Text.Trim()))
{
MessageBox.Show("密码必须包含8个字符,\r\n并且至少有1个大写字母、\r\n1个小写字母、\r\n1个数字、\r\n1个特殊字符!");
textBox1.Focus();
return;
}

    使用C#中的正则表达式,一个输入格式,两行校验代码,就这么简单的解决了这个问题。既然提到了正则表达式,那就好好的学习一下吧。


在C#中使用引入正则表达式


using System.Text.RegularExpressions;

之后就是关于正则表达式使用的一些基本语法了。


判断是否匹配


在Regex对象中,可以使用Regex.IsMatch(string)方法。

如果返回值为false,字符串中未包含要求匹配的内容,默认值为true,则证明字符串中包含,符合条件。


    关于匹配的问题还会涉及到Matches集合,再利用Matches集合进行获取匹配次数,获取匹配内容,以及捕获正则表达式中的内容。

Regex.Matches("abc123Count").count;

RegexOptions方法,指的的枚举,其中枚举的有效值有很多,具体的内容推荐一篇博客​​《C#正则表达式Regex类的用法》​​在这主要讲解两个,因为这段代码中用到的啊。


1、IgnorePatternWhitespace表示去掉模式中的非转义空白,并启用由#标记的注释,这个注意到我们的代码中是有#标识的注释的。

2、Multiline表示多行模式,改变元字符^和$的含义,它们可以匹配行的开头和结尾,在C#中^和$是有特殊意义的,所以要考虑全面啊。


    这是C#中正则表达式非常基础的应用,其实之前在JavaScript中也学习过着这些内容,但是仅仅是学习过而已。大家都知道语言是相通,可是就是没有学过真正的让语言变得灵活起来,还是需要慢慢学习啊。


【总结】


    关于C#中的学习真是学无止境,自己会的太少了,还是慢慢积累吧,把语言灵活运用起来,这才是目标啊。