正则表达式检查包含空格的字符串&特别的字符

时间:2013-12-18 17:32:08

标签: java regex

我有以下正则表达式声明:

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()方法应该失败。

3 个答案:

答案 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})"