比伯发型怎么弄的:关于C#中的一个正则表达式的问题。

来源:百度文库 编辑:高校问答 时间:2024/04/29 16:09:09
我想用C#实现一个简单的验证密码的功能,密码要求至少包含有数字、大写字母、小写字母,长度为4~8个字符之间。

我仿照书上的例子,用正则表达式匹配的方法来进行,以下是代码:

string pw = System.Console.ReadLine();
System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(@"^(?=.*\d+)(?=.*[a-z]+)(?=.*[A-Z]+).{4,8}");
if (r.Match(pw).Success)
{
System.Console.WriteLine("\r\nRight");
}
else
{
System.Console.WriteLine("\r\nWrong");
}
System.Console.ReadLine();

比如:
输入:aA1(输出wrong,因为长度小于4)
输入:aaAA(输出wrong,因为没有数字)

我实验了一下,没有问题,基本上实现了,但是有一点:
我输入了12345678Aa,输出结果仍然是right,已经超了8个字符了啊,因该是wrong啊。

我很迷惑,请大家帮忙。

System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(@"^(?=.*\d+)(?=.*[a-z]+)(?=.*[A-Z]+).{4,8}");正则表达式有问题 ,应在最后加上$,表示应该以这个模式结束。
应改为:
System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(@"^(?=.*\d+)(?=.*[a-z]+)(?=.*[A-Z]+).{4,8}$");
没加$只要前面的匹配就可以了

正如你前面加"^"表式应该以该模式开始,如果前面不加"^",则asd12345678Aa也应该是right