c#Regex.Match与.Net Regex测试仪结果不匹配
我需要限制用户密码至少有8个字符和混合的小写,大写,数字和特殊字符。我使用.NETRegex测试网站进行测试,并得出以下解决方案。从下面的两个链接中,您可以看到没有匹配项,但是匹配得非常完美,但是在我的.Net代码中,使用完全相同的正则表达式,它们都返回truec#Regex.Match与.Net Regex测试仪结果不匹配,c#,regex,C#,Regex,我需要限制用户密码至少有8个字符和混合的小写,大写,数字和特殊字符。我使用.NETRegex测试网站进行测试,并得出以下解决方案。从下面的两个链接中,您可以看到没有匹配项,但是匹配得非常完美,但是在我的.Net代码中,使用完全相同的正则表达式,它们都返回true using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpress
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace BOR.Security.CheckConstraints
{
public class CheckPasswordConstraint
{
public static bool passwordValidation(string passwordToCheck)
{
string pattern = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W)[a-zA-Z0-9\S]{8,}$";
Match m = Regex.Match(passwordToCheck.TrimEnd(), pattern, RegexOptions.IgnoreCase);
return m.Success;
}
}
}
您能告诉我缺少什么吗?您应该删除
RegexOptions.IgnoreCase
,因为(?=.[a-z])(?=.[a-z])
与(?=.[a-zA-z])
相同,只需要任何一个ASCII字母,小写或大写
此外,
[a-zA-Z0-9\S]
=\S
,因为字母和数字都是非空白字符
此外,必须修剪字符串两端,请使用.trim()
,而不是.TrimEnd()
此外,建议使用in-password正则表达式的原理,以提高它们的效率
使用
字符串模式=@“^(?=[^a-z][a-z])(?=[^a-z][a-z])(?=\D*\D)(?=\w*\w)\S{8,}$”;
Match m=Regex.Match(passwordToCheck.Trim(),pattern)
解释
-字符串的开头^
-必须至少有一个小写ASCII字母(?=[^a-z]*[a-z])
-必须至少有一个大写ASCII字母(?=[^A-Z]*[A-Z])
-必须至少有一个数字(?=\D*\D)
-必须至少有一个非单词字符(?=\w*\w)
-8个或更多非空白字符(无空格,但接受所有其他字符)\S{8,}
-字符串结束$
RegexOptions.IgnoreCase
,因为(?=.[a-z])(?=.[a-z])(?=.[a-zA-z])
(?=.[a-zA-z])
(也就是说,它只需要一个字母)WiktorStribiżew应该是答案除此之外,[a-zA-Z0-9\S]
\S