java - 正则表达式检查包含空格和特殊字符的字符串

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

最佳答案

如果你只想拒绝空格,你可以使用:

(?=.*\\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}

关于java - 正则表达式检查包含空格和特殊字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664680/

相关文章:

javascript - 用于验证计算并提取数据的正则表达式

c# - 用于匹配地址和可选后缀的正则表达式

javascript - 删除字符串,但保持其中间部分

java - 即使文件存在于 Java 中也没有这样的文件或目录错误

java - 关于Java中类成员的问题

java - makefile 多目标模式。停止

java - 通过 Sybase Jconnect JDBC 驱动程序获取与 DBCP 的连接

匹配 "*"的 JavaScript 正则表达式,除非前面有反斜杠

java - 如何删除日期(dd/mm/yyyy)中的年份(yyyy)

javascript - JS 字符串 : Replace with index in regex