我有以下正则表达式声明:
String PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,12})";
我检查声明如下:
Pattern pattern = Pattern.compile(PASSWORD_PATTERN);
Matcher matcher = pattern.matcher(password);
if(!matcher.matches()) {
// error
}
如何调整此模式以包括检查任何空格和特殊字符?如果密码包含任何空格或任何特殊字符,则match()方法应该失败。
答案 0 :(得分:4)
如果您只想拒绝空格,可以使用:
(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])\\S{6,12}
\\S
只匹配非空格。
此外,您可能不需要外括号。
编辑:没看到其他部分。如果要拒绝特殊字符,可以将\\S
更改为否定类。使用此功能虽然意味着您必须使用:[^\\s ... ]
例如,假设不应该有任何?
或空格。这变为:
(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[^\\s?]{6,12}
如果您不想要!
:
(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[^\\s?!]{6,12}
答案 1 :(得分:4)
如果密码包含任何空格或任何特殊字符
,则match()方法应该失败
就像您正在使用预告(?=....)
来检查密码是否包含至少一个
(?=.*\\d)
,(?=.*[a-z])
(?=.*[A-Z])
您可以添加消极预测(?!...)
,以确保您的密码不会包含任何不需要的字符,例如
(?!.*\\s)
+
,-
,!
(?!.*[+\\-!])
现在只需将所有这些组合成一种模式
((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\\s)(?!.*[+\\-!]).{6,12})
答案 2 :(得分:0)
只需添加:
[\w/^\s]
- \ w 检测到字符的使用(没有特殊字符)。
- ^ 表示NOT, \ s 用于检测空格字符。
- 因此, ^ \ s 确保没有空格。
全字符串:
"((?=.*\\d)(?=.*\\w)(?=.*[\w/^\s])(?=.*[A-Z]).{6,12})"