用于验证当前DoD密码标准的正则表达式

Regular expression to validate current DoD Password Standards

本文关键字:标准 正则表达式 密码 DoD 验证 用于      更新时间:2023-09-26

这里有两个不同的还没有工作。

:

^[a-zA-Z0-9'{'}:;,.?'-=+|<>!@#$%^&()'[']'/'')]{15,}

2:

(?=^.{15,}$)(?=.*'d{2,})(?=.*'W+)(?![.'n])(?=.*[A-Z]{2,})(?=.*[a-z]{2,}).*$

规则:
密码长度至少为15个字符。
密码必须至少包含以下4个类别中的2个字符:

  • 大写字母A-Z
  • 小写字母a-z
  • 数值0-9
  • {}:;,.?-=+|<>!@#$%^&()[]/'

密码不能包含空格。

谢谢你的帮助。

----编辑----

2wsx@WSX3edc#EDC

3edc#EDC4rfv$RFV

nhy6NHY^mju7MJU&

1qaz!QAZ2wsx@WSX

我已经在http://www.gskinner.com/RegExr/测试了它们,我没有让它们工作。

我觉得下面的一些例子应该可以工作,但他们没有,或者我一定是做错了什么

要么一个接一个地检查这些正则表达式,要么从它们创建一个基于预看的大表达式。

规则:

  • 密码长度至少为15个字符
<>之前^ {15} $之前

密码必须至少包含以下4个类别中的2个字符:

  • 大写字母顺序
<>之前^ (. * ? [a - z]) {2}之前
  • 小写字母
<>之前^ (. * ? [a - z]) {2}之前
  • 数字(0 - 9)
<>之前^ (. * ?) [0 - 9] {2}之前
  • 特殊字符({}:;,.?-=+|<>!@#$%^&()[]/)
<>之前^(.*?[{}:;,.?'-=+|!@#$%^&()'[']/]){ 2}之前

密码不能包含空格

为什么?但是如果必须,则将第一个表达式更改为

<>之前^ ' S {15} $

为什么在一个正则表达式中?执行如下命令:

if( length($password) >= 15 &&
    ($password =~ y/A-Z//) >= 2 &&
    ($password =~ y/a-z//) >= 2 &&
    ($password =~ y/0-9//) >= 2 &&
    ($password =~ y/{}:;,.?'-=+|<>!@#%^&()'[']///) >= 2 &&
    $password =~ /^'S+$/ ) {
  print "password validates!'n";
} else {
  print "password doesn't validate!'n";
}

这样当你需要添加更多的条件时,很容易做到。这也比把它们放在一个巨大的正则表达式中可读性和可维护性要高得多。

我找到了答案....JavaScript…谢谢你的帮助。

这个可以。

^((?=(.*['d]){2,})(?=(.*[a-z]){2,})(?=(.*[A-Z]){2,})(?=(.*[^'w'd's]){2,})).{15,}$

^(?!.* )(?=.{15})(?=.*[A-Z].*[A-Z])(?=.*[a-z].*[a-z])(?=.*[0-9].*[0-9])(?=.*[{}:;,.?'-=+|<>!@#$%'^&()[']/''].*[{}:;,.?'-=+|<>!@#$%'^&()[']/''])

我的Regex应该工作,即使分隔字符。例如Ab0%Ab0%0000000000000(您看,没有AA,两个A是分开的)。我已经转义了最小字符数(仅^])

  • ^ Beginning of the string

  • (?!.* ) Not (any character repeated * times followed by a space)

  • (?=.{15}) Any character for 15 times (as it's written, even if there are other characters after the 15th it won't change anything)

  • (?=.*[A-Z].*[A-Z]) Any character repeated * times, an Upper Case letter, any character repeated * times, an Upper Case letter

  • (?=.*[a-z].*[a-z]) Any character repeated * times, a Lower Case letter, any character repeated * times, a Lower Case letter

  • (?=.*[0-9].*[0-9]) Any character repeated * times, a Digit, any character repeated * times, a Digit

  • (?=.*[{}:;,.?'-=+|<>!@#$%'^&()[']/''].*[{}:;,.?'-=+|<>!@#$%'^&()[']/'']) Any character repeated * times, a Symbol, any character repeated * times, a Symbol

所有子表达式都是零宽度超前查找(或零宽度负超前查找),并且它们都从第一个字符开始,因此它们都在"and"中,并且它们必须都为真。