我正在使用 Java 6。我有一个包含“特殊”字符的字符串——“!@#$%^&*()_”。如何编写 Java 表达式来检查另一个字符串“密码”是否包含第一个字符串中定义的至少一个字符?我有
regForm.getPassword().matches(".*[\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+].*")
但我不想对特殊字符进行硬编码,而是将它们从属性文件加载到字符串中。因此,从文件中加载后,我无法弄清楚如何正确转义所有内容。
您可以尝试使用Pattern.quote从包含特殊字符和转义符号的字符串创建正则表达式。尝试这个:
String special = "!@#$%^&*()_";
String pattern = ".*[" + Pattern.quote(special) + "].*";
regFrom.getPassword().matches(pattern);
我认为简单地循环正则表达式来检查每个字符可能会更好,并且适用于所有情况:
String special = "!@#$%^&*()_";
boolean found = false;
for (int i=0; i<special.length(); i++) {
if (regFrom.getPassword().indexOf(special.charAt(i)) > 0) {
found = true;
break;
}
}
if (found) { // password has one of the allowed characters
//...
//...
}
一种选择是使用StringTokenizer
,并查看它是否返回超过 1 个子字符串。它有一个构造函数,允许指定要分割的字符。
无论如何,我最喜欢的选择就是迭代字符并使用String.indexOf
.