gpt4 book ai didi

c# - 带有数字或特殊字符的密码复杂性正则表达式

转载 作者:行者123 更新时间:2023-11-30 16:49:43 26 4
gpt4 key购买 nike

我有一些正则表达式可以检查传入密码的复杂性要求。但是,它不够强大,无法满足我的需求。

((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,20})

它确保密码满足最小长度,包含两种情况的字符并包含一个数字。

但是我需要修改它以便它可以包含数字和/或允许的特殊字符。我什至得到了允许的特殊字符列表。

我有两个问题,分隔特殊字符并使第一个条件执行和/或匹配数字或特殊字符。

我非常感谢来自这些部分的正则表达式之神之一的建议。

允许的特殊字符是:@%+\/'!#$^?:.(){}[]~-_

最佳答案

如果我对您的问题的理解正确,那么您正在寻找需要另一个特殊字符的可能性。这可以按如下方式完成(请参阅最后的前瞻):

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!§$%&/(/)]).{8,20})

regex101.com 上查看此方法的演示.
但是,您可以通过进一步的批准使您的表达更加出色:点星号 (.*) 会带您下线并随后返回。如果您的密码有 10 个字符,并且您想要确保需要完成四次前瞻,您将需要至少 40 个步骤(甚至更多,因为引擎需要回溯)。< br/>要优化您的表达,您可以使用所需字符的完全相反,从而使引擎更快结束。此外,正如评论中已经指出的那样,不要限制您的最大密码长度。
用正则表达式的语言来说,这可以归结为:

((?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=.*[!§$%&/(/)]).{8,})

使用第一种方法,63 steps are needed , 而优化版只有needs 29 steps (一半!)。关于你的第二个问题,允许一个数字 一个特殊字符,你可以简单地使用一个交替 (|) 像这样:

((?:(?=\D*\d)|(?=.*[!§$%&/(/)]))(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,})

或者把 \d 也放在括号里,像这样:

((?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=.*[\d!§$%&/(/)]).{8,})

这将被视为 ConsideredAgoodPassw!rdC0nsideredAgoodPassword 一个好的密码。

关于c# - 带有数字或特殊字符的密码复杂性正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36132154/

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