密码正则表达式无法正常工作

时间:2014-05-01 06:52:50

标签: java regex

这是我的密码正则表达式。

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

当我输入"cdsafcghiufvcdsfvcdsghfcydsgfcghdysufcdus"超过20个单词时,它的工作正常 但是当我使用"Akash1AAkash1AAkash1AAkash1AAkash1AAkash1AAkash1AAkash1AAkash1A"时,它无效。

仅小写或大写它的工作正常,但是当我使用大写时,数字和小写的最大长度不起作用。

我几乎尝试了所有事情,但没有成功。

1 个答案:

答案 0 :(得分:2)

密码正则表达式,现在很有趣。

我提交的内容:

^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]).*$

<强> PHP

$re = '/^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+\-=\[\]{};\':"\\|,.<>\/?]).*$/mx'; 
$str = 'nonumbersSOITFAILS\nalllowercasesoitfails\nALLUPPERCASESOITFAILS\n111111111111111111111\n1alllowercasesoitfails\nALLUPPERCASESOITFAILS1\n1Aa%\n1%UPPERCASElowercasenumberandspecialcharacter\n1%UPPERCASElowercase spacetoo\n\n\n'; 

preg_match_all($re, $str, $matches);

<强> JAVASCRIPT

var re = /^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]).*$/gmx; 
var str = 'nonumbersSOITFAILS\nalllowercasesoitfails\nALLUPPERCASESOITFAILS\n111111111111111111111\n1alllowercasesoitfails\nALLUPPERCASESOITFAILS1\n1Aa%\n1%UPPERCASElowercasenumberandspecialcharacter\n1%UPPERCASElowercase spacetoo\n\n\n';
var m;

while ((m = re.exec(str)) != null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

<强> PYTHON

textpop-up
import re
p = re.compile(r'^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+\-=\[\]{};\':"\\|,.<>\/?]).*$', re.MULTILINE | re.VERBOSE)
str = "nonumbersSOITFAILS\nalllowercasesoitfails\nALLUPPERCASESOITFAILS\n111111111111111111111\n1alllowercasesoitfails\nALLUPPERCASESOITFAILS1\n1Aa%\n1%UPPERCASElowercasenumberandspecialcharacter\n1%UPPERCASElowercase spacetoo\n\n\n"

re.findAll(p, str)

<强> REGEX101


它检查的内容:

  • 最少8个字符
  • 至少一个数字(0-9)
  • 至少一个小写字母(a-z)
  • 至少一个大写字母(A-Z)
  • 至少一个特殊字符(!@#$%^&amp; *()_ + - = [] {};':“\ |,。&lt;&gt; /?)

不排除的内容:

  • 空格(通常是密码中允许的空格)
  • 最大字符数(易于更改)
  • 可能是我缺少的东西

不检查的内容:

  • 中间数字或符号
  • 重复字符(不区分大小写)
  • 连续大写字母
  • 连续小写字母
  • 连续数字
  • 连续信件
  • 连续数字
  • 顺序符号
  • 字典词
  • 音节

通常在最低级别,假设密码与条件匹配,并且使用此regex在其中没有字典单词,将确保大多数密码强度测试人员的中位数[45-65]得分,并确保“提供良好的“密码。

回到你的问题

“只对小写或大写它的工作正常,但是当我使用大写时,数字和小写的最大长度不起作用。”

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,20})
      ^ the extra `\` makes it invalid for any pattern.

如果你有一个大写和小写字母至少有一个数字,它将被删除它将匹配。

只有大写或小写或数字不匹配。

目前它将捕获前20个字符,但验证无限制字符。在开头和结尾[分别在第一个和最后一个(&lt; -here和here-&gt;)之间]使用str.matches(regex)^$字符,这将限制匹配到6到20之间。

作为旁注,您提供的regex不会导致您提到的结果,因此请确保regex是您目前正在使用的正确的结果,因为这是只有这样你才能得到任何有用的反馈。