这是我的密码正则表达式。
((?=.*\\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/