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

3

我有以下的正则表达式语句:

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
}

如何调整此模式以包括检查任何空格和特殊字符?即如果密码包含任何空格或任何特殊字符,则matches()方法应失败。


1
使用\s进行空格匹配。 - Rakesh KR
1
你能提供样本输入和正则表达式要匹配的内容吗? - The Guy with The Hat
你能定义特殊字符吗? - anubhava
3个回答

5

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

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

4
在matches()方法中,假如密码包含任何空格或特殊字符,则应该失败。就像您使用look-ahead(?=....)来检查密码是否至少包含以下内容:
  • 数字(?=.*\\d),
  • 小写字母(?=.*[a-z])
  • 大写字母(?=.*[A-Z])
您可以添加negative-look-ahead(?!...)来确保您的密码不包含任何不需要的字符,例如:
  • 空格(?!.*\\s)
  • 特殊字符(根据您想要的内容而定),例如不能有+、-、! (?!.*[+\\-!])
现在只需将它们合并到一个模式中即可。
((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\\s)(?!.*[+\\-!]).{6,12})

啊,这很有道理,这就是我要找的。+1 - invictvs1
@invictvs 很高兴能帮助到您 :) - Pshemo

0

只需添加:

[\w/^\s]

- \w 检测单词字符的使用(不包括特殊字符)。
- ^ 表示 NOT,\s 用于检测空格字符。
- 因此,^\s 确保没有空格。

完整字符串:

"((?=.*\\d)(?=.*\\w)(?=.*[\w/^\s])(?=.*[A-Z]).{6,12})"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接