c#Regex.Match与.Net Regex测试仪结果不匹配

c#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

我需要限制用户密码至少有8个字符和混合的小写,大写,数字和特殊字符。我使用.NETRegex测试网站进行测试,并得出以下解决方案。从下面的两个链接中,您可以看到没有匹配项,但是匹配得非常完美,但是在我的.Net代码中,使用完全相同的正则表达式,它们都返回true

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)

解释

  • ^
    -字符串的开头
  • (?=[^a-z]*[a-z])
    -必须至少有一个小写ASCII字母
  • (?=[^A-Z]*[A-Z])
    -必须至少有一个大写ASCII字母
  • (?=\D*\D)
    -必须至少有一个数字
  • (?=\w*\w)
    -必须至少有一个非单词字符
  • \S{8,}
    -8个或更多非空白字符(无空格,但接受所有其他字符)
  • $
    -字符串结束

它们与您的代码不完全相同,请删除
RegexOptions.IgnoreCase
,因为
(?=.[a-z])(?=.[a-z])(?=.[a-zA-z])
(?=.[a-zA-z])
(也就是说,它只需要一个字母)WiktorStribiżew应该是答案除此之外,
[a-zA-Z0-9\S]
\S