2011-05-21 49 views
1
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; 
} 

代码是有点明显,我希望Java的布尔问题

如果玩家的名字是短超过12或然后3,或有不应该是我一个名称= BAM任何符号,禁!

但即使认为我的玩家的名字就像混沌或测试一样,它会被这段代码自动编程。 IDK的,如果namepattern图案块字符藏汉,我只是为阻止像"!#&%¤/&%(/)(/(=)[email protected]£[email protected]£{€@£叶... 符号我在做什么错:(?

回答

3

我想你的意思是(!namePattern.matcher(player.getName()).matches())

此外,您可以”因为它检查长度[a-zA-Z0-9_-]{3,12}

编辑:VE仅使用正则表达式匹配。

可以使用这样的功能

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所以我删除他们:)

+0

感谢现在的工作,但即使我的字符命名的东西!“__#! “_#!或者像这样的符号,它不会被禁止。只有长效检查似乎工作。 – PirateOwh 2011-05-21 14:42:14

+0

使用.matches()时,不需要锚(“^”和“\ z”)。 – 2011-05-21 14:46:45

+0

如何检查玩家是否在名称中使用symbool?我想阻止所有符号 – PirateOwh 2011-05-21 14:47:50