1

我正在构建一个验证用户名的函数,在这种情况下,我只想接受字母字符。我将提供的用户输入与此正则表达式进行匹配:

[1-9!@#$%&*()_+=|<>?{}\\[\\]~-,]

这是使用正则表达式的方法:

public static String purgeInvalidLogin(String failedLogin, String pattern) {
    Pattern special = Pattern.compile (pattern);
    String purgedLogin = failedLogin.replaceAll(special.pattern(), ""); // remove any special characters before moving on
    purgedLogin = StringUtils.deleteWhitespace(purgedLogin);
    return purgedLogin;
}

但是,当尝试运行它时,我收到此消息:

索引 25 附近的非法字符范围 [!@#$%&*()_+=|<>?{}[]~-,] ^

仅在我添加逗号后才发生。我也试过表达 [!@#$%&*()_+=|<>?{}[]~-\,] (转义逗号)无济于事。我想知道如何正确使用正则表达式来排除逗号使用我上面的方法。

提前致谢。

4

2 回答 2

2

转义前面的连字符。只要您在其后添加另一个字符(逗号),它就会被解释为定义一系列字符。

[1-9!@#$%&*()_+=|<>?{}\\[\\]~\\-,]
于 2013-09-04T16:15:15.720 回答
0

您只想接受 alpha 字符,并且通过列出每个可能的非法字符来做到这一点。我认为你已经把它倒退了,最好寻找你想要的(这将是一个更短的正则表达式)并标记不匹配。

于 2013-09-04T16:47:05.247 回答