java - 密码正则表达式不起作用

标签 java regex

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

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

当我输入“cdsafcghiufvcdsfvcdsghfcydsgfcghdysufcdus”超过20个字时,它工作正常 但是当我使用 "Akash1AAkash1AAkash1AAkash1AAkash1AAkash1AAkash1AAkash1AAkash1A" 时它不起作用。

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

我几乎尝试了一切,但没有成功。

最佳答案

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

我向您提交的内容:

^.*(?=.{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)
  • 至少一个特殊字符 (!@#$%^&*()_+-=[]{};':"\|,.<>/?)

它不排除什么:

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

它不检查的内容:

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

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

回到你的问题

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

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

删除后,如果您有大写和小写字母且至少有一位数字,则它将匹配。

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

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

附带说明一下,您提供的正则表达式不会产生您提到的结果,因此请确保正则表达式与您当前在未来,因为这是您获得有用反馈的唯一途径。

关于java - 密码正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23403386/

相关文章:

JavaScript RegExp 用多个其他字符串替换多个字符串

java - 如何为自定义对话框设置圆角?

java - 如何在 Java 中解开 Windows 文件名?

java - MongoDB和Badges系统分析

java同步静态方法

ruby - 如何从 Ruby 中的字符串中去除括号?

java - 日期/时间的模式匹配?

java - 用于字符串获取不带空格的单词的正则表达式,但其中一部分可以包含空格

javascript - 我如何在javascript中只获取数字

c++ - Boost Regex - 匹配的字符串存储在哪里?