与任何特殊字符匹配的强密码正则表达式

Bru*_*ino 6 c# regex

我需要以下检查以进行强密码验证:

  • 至少7个字符
  • 至少1个大写字符(AZ)
  • 至少1个数字(0-9)
  • 至少有一个特殊的字符

我找到并调整了一个RegEx,就像这样(对不起,我丢失了参考资料......):

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@'#.$;%^&+=!""()*,-/:<>?]).*$
Run Code Online (Sandbox Code Playgroud)

它的工作C#原理除了我需要匹配任何特殊字符,我的意思是任何东西.换句话说,我需要一个"特殊字符"是什么,数量和更低/大写字母.

编辑:

为了清楚起见,让我们考虑重音特殊字符,因此é,ñ在这个问题的上下文中应该将其视为特殊字符.

Yur*_*ich 8

^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$
Run Code Online (Sandbox Code Playgroud)

  • 他说"除了数字和低/大写字母之外的任何东西",我认为é符合资格. (3认同)
  • 我想巴特试图说'[^ a-zA-Z0-9]`应匹配任何*不是字母*的字符,但它会匹配`é`,这肯定是*是*一封信(我相信它会处理其他"国际"字母,如å,ñ等,它真的不应该) (2认同)
  • @brunosalvino:当然,如果这些是要求,你知道它,我认为没有问题.但我经常看到这种正则表达式建议OP和提供答案的人都不知道这一点,在这种情况下他们会引入一个错误(在我看来是一个相当严重的错误).但这似乎并非如此.(这不是我投票,BTW) (2认同)

ken*_*ytm 5

(不是C#代码)

def validate (value):
    return (value.Length >= 7 &&
            value.IndexOfAny(['0', ..., '9']) >= 0 &&
            value.IndexOfAny(['A', ..., 'Z']) >= 0 &&
            value.IndexOfAny(['@', ..., ')']));
Run Code Online (Sandbox Code Playgroud)

是的我知道这不是问题所在,但我相信它比任何RegExp解决方案更清晰,性能更高,维护更容易.