private static final Pattern namePattern =
Pattern.compile("[a-zA-Z0-9_-]{3,12}");
if (player.getName().length() < 3 ||
player.getName().length() > 12 ||
namePattern.matcher(player.getName()).matches()) {
player.ban("[Autoban] Character-name PE", true);
return;
}
代码有点明显,我希望
如果玩家的名字长于 12 或短于 3,或者有任何不应该是名字的符号 = BAM,禁止!
但即使我的玩家名称像 Chaos 或 test,它也会被此代码自动禁止。
idk 如果 namepattern 模式也阻止字符,我只是阻止像 "!#&%¤/&%(/)(/(=)$@£$@£{€@£
这样的符号额...
我做错了什么:(?
最佳答案
我想你的意思是 (!namePattern.matcher(player.getName()).matches())
。
此外,您可以只使用正则表达式匹配:[a-zA-Z0-9_-]{3,12}
因为它会检查长度。
编辑:
你可以使用这样的函数
public void banIfNeeded(Player player)
{
Pattern namePattern = Pattern.compile("[a-zA-Z0-9_-]{3,12}");
if(!namePattern.matcher(player.getName()).matches()) {
System.out.print("Banned");
// Ban somehow
}
}
正如@bkail 评论的那样(谢谢!),不需要 ^
和 \z
所以我删除了它们:)
关于Java boolean 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082283/