gpt4 book ai didi

c# Regex.Match 与 .Net Regex Tester 结果不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:49 24 4
gpt4 key购买 nike

我需要将用户的密码限制为至少 8 个字符以及小写、大写、数字和特殊字符的混合。我已经使用 .Net Regex Test 网站进行测试,并得出以下解决方案。从下面的两个链接中您可以看到 mer220d#没有匹配项,但是 Mer220d#完美匹配,但在我使用完全相同的 Regex 的 .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]) 并且只需要任意 1 个 ASCII 字母,小写或大写。

此外,[a-zA-Z0-9\S] = \S 因为字母和数字都是非空白字符。

此外,您必须在两端修剪字符串,使用.Trim(),而不是.TrimEnd()

此外,建议使用constrast的原理在密码正则表达式中使它们更有效率。

使用

字符串模式 = @"^(?=[^a-z][a-z])(?=[^A-Z][A-Z])(?=\D*\d)(?=\w*\W)\S{8,}$"; 匹配 m = Regex.Match(passwordToCheck.Trim(), pattern);

解释

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

关于c# Regex.Match 与 .Net Regex Tester 结果不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com