密码复杂性正则表达式与数字或特殊字符
我有一些正则表达式会检查传入密码的复杂性要求。 然而,它并不足以满足我的需求。
((?=.*d)(?=.*[az])(?=.*[AZ]).{8,20})
它确保密码满足最小长度,包含两种情况的字符并包含一个数字。
但是我需要修改它,以便它可以包含数字和/或允许的特殊字符。 我甚至获得了允许的特殊字符列表。
我有两个问题,分隔特殊字符并使第一个条件执行和/或匹配数字或特殊。
我非常感谢这些部分中的一个正则表达神的建议。
允许的特殊字符是: @%+/'!#$^?:.(){}[]~-_
如果我理解你的问题,你正在寻找一个可能需要另一个特殊角色的可能性。 这可以按如下方式完成(参见最后一个预测):
((?=.*d)(?=.*[az])(?=.*[AZ])(?=.*[!§$%&/(/)]).{8,20})
请在regex101.com上查看此方法的演示。
但是,通过进一步的批准,你可以让你的表达更好:点星( .*
)带你下线,然后回溯。 如果你有一个10个字符的密码并且你想确定,需要完成四个前瞻,你需要至少 40个步骤(甚至更多,因为引擎需要回溯)。
要优化表达式,您可以使用与所需字符完全相反的方式,从而使引擎更快地结束。 此外,正如评论中已经指出的那样,不要限制您的最大密码长度。
在正则表达式的语言中,这将归结为:
((?=D*d)(?=[^az]*[az])(?=[^AZ]*[AZ])(?=.*[!§$%&/(/)]).{8,})
使用第一种方法, 需要63个步骤 ,而优化版本只需要29个步骤 (一半!)。 关于你的第二个问题,允许数字或特殊字符,你可以简单地使用交替( |
),如下所示:
((?:(?=D*d)|(?=.*[!§$%&/(/)]))(?=[^az]*[az])(?=[^AZ]*[AZ]).{8,})
或者将d
放在括号中,如下所示:
((?=[^az]*[az])(?=[^AZ]*[AZ])(?=.*[d!§$%&/(/)]).{8,})
这个人会认为是ConsideredAgoodPassw!rd
和C0nsideredAgoodPassword
一个很好的密码。
上述就是C#学习教程:密码复杂性正则表达式与数字或特殊字符分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949182.html