如何检查字符串是否包含来自另一个字符串的至少一个字符?

时间:2013-05-22 14:19:52

标签: java regex

我正在使用Java 6.我有一个包含“特殊”字符的字符串 - “!@#$%^& *()_”。如何编写Java表达式来检查另一个字符串“password”是否至少包含第一个字符串中定义的一个字符?我有

regForm.getPassword().matches(".*[\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+].*")

但我不想对特殊字符进行硬编码,而是将它们从属性文件加载到字符串中。因此,在从文件加载后,我无法确定如何正确地逃避所有内容。

3 个答案:

答案 0 :(得分:11)

您可以尝试使用Pattern.quote从包含特殊字符和转义符号的字符串创建正则表达式。试试这个:

String special = "!@#$%^&*()_";
String pattern = ".*[" + Pattern.quote(special) + "].*";
regFrom.getPassword().matches(pattern);

答案 1 :(得分:2)

我认为简单地循环正则表达式来检查每个角色可能会更好,并且适用于所有情况

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
   //...
   //...
}

答案 2 :(得分:0)

一个选项是使用StringTokenizer,看看它是否返回超过1个子字符串。它有一个构造函数,允许指定要拆分的字符。

无论如何,我最喜欢的选择就是迭代字符并使用String.indexOf