gpt4 book ai didi

regex - MVC模型中强密码的正则表达式

转载 作者:行者123 更新时间:2023-12-04 00:11:43 25 4
gpt4 key购买 nike

我需要创建一个正则表达式来验证我的 MVC 模型中的强密码。以下是我需要应用的规则:

  • 至少 7 个字符
  • 最多 15 个字符
  • 4 种不同类型的字符中至少有 3 种。
    • 数字
    • 小写
    • 大写
    • 特殊(即 !@#$%&/=?_.)

到目前为止,这是我尝试过的:

[DataType(DataType.Password)]
[RegularExpression("([a-z]|[A-Z]|[0-9]|[\\W]){4}[a-zA-Z0-9\\W]{3,11}", ErrorMessage = "Invalid password format")]
public string Password { get; set; }

最佳答案

创建一个正则表达式来以任何顺序查找任意数量的不同类型的字符类有点具有挑战性,因为一旦您匹配到一个字符,它就已经被捕获并且您无法备份它。但是,.NET 正则表达式引擎支持先行表达式。因此,您可以检查以确保字符串包含某些内容,而无需实际捕获任何字符串。例如,假设您要查找至少包含一个字母“J”实例的任意 10 个字符长的字符串。您可以使用前瞻表达式轻松做到这一点,如下所示:

(?=.*J).{10}

(?=) 结构声明了一个先行模式。它查找的模式是 .*J,这意味着从当前位置开始,可以有任意数量的任意字符后跟字母“J”。如果 J 之后有任何内容,那很好,它仍然会匹配。但是,由于它是前瞻性的,实际上没有捕获到这些字符,因此 .{10} 捕获模式的一部分将从原始位置开始并从那里进行匹配。由于前瞻根本不移动位置,您可以将它们中的多个连续放置而不会产生任何后果,因此您可以执行以下操作:

^(?=.*[A-Z])(?=.*\d)(?=.*[a-z])(?=.*\W).{7,15}$

至于只应用四个字符类规则中的三个,我能想到的唯一方法是列出所有组合(例如,对于三个规则 A、B 和 C 中的两个,您可以匹配 AB|AC|BC) 。因此,举例来说,如果您只关心三个中的两个(例如,大写、小写和数字),您可以像这样构建前瞻:

(?:(?=.*[A-Z])(?=.*\d)|(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[a-z]))

让它在四个选项中得到支持只是使选项列表更长的问题...

关于regex - MVC模型中强密码的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33915367/

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