gpt4 book ai didi

C# - 正则表达式不匹配输入字符串

转载 作者:太空狗 更新时间:2023-10-30 01:29:37 26 4
gpt4 key购买 nike

我想为密码做一些模式匹配,并找到了 regex example在 SO 上,但是当我通过一个应该被视为“强”的密码时,我遇到了相反的情况。例如,字符串“JlcimYQF+EkHVA*”的评分为 1,这意味着字符串模式在正则表达式中不匹配,但我不确定原因。

代码如下:

public class PasswordAdvisor
{
public static PasswordScore CheckStrength(string password)
{
int score = 1;

if (password.Length < 12)
return PasswordScore.TooShort;
if (password.Length >= 16)
score++;
if (Regex.Match(password, @"/\d+/", RegexOptions.ECMAScript).Success)
score++;
if (Regex.Match(password, @"/[a-z]/", RegexOptions.ECMAScript).Success &&
Regex.Match(password, @"/[A-Z]/", RegexOptions.ECMAScript).Success)
score++;
if (Regex.Match(password, @"/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/", RegexOptions.ECMAScript).Success)
score++;

return (PasswordScore)score;
}
}

减速:

var passwordStrengthScore = PasswordAdvisor.CheckStrength(@"JlcimYQF+EkH*VA");

Console.WriteLine((int)passwordStrengthScore);

switch (passwordStrengthScore)
{
case PasswordScore.TooShort:
Console.WriteLine("Password is too short");
break;
case PasswordScore.Weak:
Console.WriteLine("Password is very weak");
break;
case PasswordScore.Medium:
Console.WriteLine("OK password");
break;
case PasswordScore.Strong:
Console.WriteLine("Strong password");
break;
case PasswordScore.VeryStrong:
Console.WriteLine("Very strong password");
break;
}

最佳答案

您应该从所有模式中删除 / 分隔符,如 .NET regexes are defined with string literals, no delimiters are required ,并且这些 / 字符是与您期望的不匹配的模式的一部分。

您应该替换 @"/.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/"使用 @"[!,@#$%^&*?_~£()-]" 需要至少一个这些特殊字符。请注意,文字之间的字符类中未转义的 - 会创建一个范围,因此将其放在末尾(或将其转义)更安全。注意:我将逗号保留在里面,但由于您将其用作 OR 运算符,您可能应该将其完全删除。 OR 关系是正字符类中原子之间的默认关系。

在除 Regex.Match(password, @"\d+", RegexOptions.ECMAScript) 语句之外的所有语句中,您可以安全地删除仅影响速记的 RegexOptions.ECMAScript 选项字符类(如 \s\d 等)。

使用

    if (Regex.Match(password, @"\d+", RegexOptions.ECMAScript).Success)
score++;
if (Regex.Match(password, @"[a-z]").Success &&
Regex.Match(password, @"[A-Z]").Success)
score++;
if (Regex.Match(password, @"[!,@#$%^&*?_~£()-]").Success) // check if you need a comma here
score++;

关于C# - 正则表达式不匹配输入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50986292/

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