Java 密码的Regexp
我使用java和一个regexp 我制作了一个用于密码验证的regexp:Java 密码的Regexp,java,regex,Java,Regex,我使用java和一个regexp 我制作了一个用于密码验证的regexp: String PASSWORD_PATTERN_ADVANCED = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\\\\@#$¤£µ§%&<>,.!:?;~{-|`'_^¨éèçàù)=}()°\"\\]\\[²³*/+]).{8,20}$"; String PASSWORD\u PATTERN\u ADVANCED=“^(?=.\\\\\d)(?=.[a-z])
String PASSWORD_PATTERN_ADVANCED = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\\\\@#$¤£µ§%&<>,.!:?;~{-|`'_^¨éèçàù)=}()°\"\\]\\[²³*/+]).{8,20}$";
String PASSWORD\u PATTERN\u ADVANCED=“^(?=.\\\\\d)(?=.[a-z])(?=.[\\\\\\\\\\\\$µ§%&.!:?;{-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[\\\\\\\\\\\\\\\\\\\\\\[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
或者没有额外的斜杠:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\\@#$¤£µ§%&<>,.!:?;~{-|`'_^¨éèçàù)=}()°"\]\[²³*/+]).{8,20}$
(?=.*.\d)(?=.[a-z])(?=.[a-z])(?=.[\\\\\\\\\\\$µ§%&,!:?;{-\\\\\\\\\\\\\\\\\\\\\\\[\\\\\\\\\\\\\[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$
whuch的意思是(我可能错了):至少一个数字/至少一个小写/至少一个大写/至少一个列出的特殊字符/最小总长度为8,最大长度为20
制作了一个测试用例,生成成功和失败的密码
成功->好,全部通过
失败->几乎可以
唯一失败的密码:D是其中有空格的密码,如:
iF\ !h6 2A3|Gm
¨I O7 gZ2%L£k vd~39
2< A Uw a7kEw6,6S^
cC2c5N#
6L kIw~ Béj7]5
ynRZ #44ç
9A `sè53Laj A
s²R[µ3 9UrR q8n
iF\!h6 2A3 | Gm
¨7 gZ2%L.k vd~39
2
我很困惑
有什么想法可以让它工作吗
谢谢您的任何条件都没有说明密码中不能包含的内容,只说明必须包含的内容。您还需要一个条件,该条件组合所有可能的有效字符,并确保密码中的所有字符都在该列表中(即,
(\d|[a-z]|[a-z]|#$…){8,20}
作为最终条件)。或者是一个被拒绝的字符列表。我可能错了,但是如果您只是不想要空格,那么在前瞻中使用[^\\s]
而不是
String PASSWORD_PATTERN_ADVANCED =
"^(?=[^\\s]*\\d)"
+ "(?=[^\\s]*[a-z])"
+ "(?=[^\\s]*[A-Z])"
+ "(?=[^\\s]*[\\\\@#$¤£µ§%&<>,.!:?;~{-|`'_^¨éèçàù)=}()°\"\\]\\[²³*/+])"
+ ".{8,20}$";
字符串密码\u模式\u高级=
“^(?=[^\\s]*\\d)”
+“(?=[^\\s]*[a-z])”
+“(?=[^\\s]*[A-Z])”
+“(?=[^\\s]*[\\\\\\\$µ§%&,.!:?;{-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[sounderi*/+])”
+ ".{8,20}$";
正则表达式可能不是此处作业的正确工具
正则表达式最适合匹配模式;您所描述的本身并不是一个真正的模式;它更多的是一个规则集。当然,您可以创建一些有帮助的正则表达式,但它是一段非常复杂和不透明的代码,这使得维护成为一项挑战
这样的方法可能更适合:
public boolean isValidPassword(String password) {
boolean containsLowerCase;
boolean containsUpperCase;
boolean containsInvalid;
boolean containsSpecialChar;
boolean containsDigit;
for(char c: password.toCharArray()) {
containsLowerCase ||= Character.isLowerCase(c);
containsUpperCase ||= Character.isUpperCase(c);
containsDigit ||= Character.isDigit(c);
containsSpecialChar ||= someMethodForDetectingIfItIsSpecial(c);
}
return containsLowerCase &&
containsUpperCase &&
containsSpecialChar &&
containsDigit &&
!containsInvalid &&
password.length >=8 && password.length <=20;
}
公共布尔值isValidPassword(字符串密码){
布尔容器箱;
布尔容器用例;
布尔包含无效;
布尔值包含特殊字符;
布尔包含数字;
for(char c:password.toCharArray()){
containsLowerCase | |=字符。isLowerCase(c);
ContainesSupercase | |=字符.isUpperCase(c);
containsDigit | |=字符.isDigit(c);
ContainessSpecialChar | |=检测设备特殊性的某种方法(c);
}
返回集装箱箱&&
集装箱供应箱&&
包含特殊字符&&
集装箱数字&&
!containsInvalid&&
password.length>=8&&password.length以防万一..你检查过了吗?@hovanesyan不错!这是直接链接。我一定会在我未来的开发中使用它。