我想要做的是拒绝任何包含a-z,0-9或_
之外的字符的字符串我尝试使用下面的匹配函数作为其他地方看到的ID,但我无法让它正常工作。它会告诉我字符串在没有的情况下是好的,或者它会告诉我它不是很好。
public static Boolean checkc(String word) {
String w = word;
for (int i = 0; i < w.length(); i++) {
if (w.substring(i, i).matches("[A-Za-z0-9_]")) {
return true;
}
}
return false;
}
现在逻辑可能是错误的,因为我试图让它工作但是为了公平,它首先不起作用。我正在检查调用它的函数中的一些东西,所以我只需要知道它是否符合规则的字符串。
答案 0 :(得分:3)
substring
的结束索引参数是独占的,因此substring(i, i)
始终返回0长度的字符串。你可以使用substring(i, i+1)
解决这个问题,但是没有理由在这里使用循环。您可以使用word.matches("[A-Za-z0-9_]+")
并立即检查整个字符串。正则表达式量词+
表示“一个或多个”。您还可以使用量词*
,这意味着“零或更多”,如果该字符串为空,则该方法应返回true。
编辑:我刚注意到你的循环逻辑还有另一个问题。循环中的条件在第一次满足条件时返回true:
for (...) {
if ( /* condition is met */ )
return true;
}
return false;
该逻辑仅要求条件至少满足一次,然后返回true,但您可能需要以下内容:
for (...) {
if (! /* condition is met */ )
return false;
}
return true;
这要求每个角色都满足条件。
答案 1 :(得分:2)
试试这个:
public static boolean check(String word) {
return word.matches("[^a-zA-Z0-9_]+");
}
当word
字符串不包含方括号中描述的单个字符时,此方法返回true,^ regex符号表示与逻辑相同! (例如!true == false)。在方括号后加上符号+
表示一个符号[]
可能会重复一次或多次。
javadoc链接到Pattern class(正则表达式解释和示例)
Regex101方便的在线正则表达式调试工具
答案 2 :(得分:0)
stringToCheck.String.matches(&#34; [^ 0-9A-ZA-Z _]&#34)
这将检查需要匹配的字符串是否包含任何数字或字母并返回布尔值