我正在构建一个验证用户名的函数,在这种情况下我只想接受字母字符。我将提供的用户输入与此正则表达式进行匹配:
[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附近的非法字符范围[!@#$%&amp; *()_ + = |&lt;&gt;?{} []〜 - ,] ^
只有在我添加逗号后才会发生。我也尝试过表达式[!@#$%&amp; *()_ + = |&lt;&gt;?{} []〜 - \,](转义逗号)无济于事。我想知道如何正确使用正则表达式来排除使用上述方法的逗号。
提前致谢。
答案 0 :(得分:2)
在它之前逃脱连字符。只要在其后添加另一个字符(逗号),它就会被解释为定义一系列字符。
[1-9!@#$%&*()_+=|<>?{}\\[\\]~\\-,]
答案 1 :(得分:0)
您只想接受alpha字符,并且您通过列出每个可能的非法字符来执行此操作。我认为你已经倒退了,最好是寻找你想要的东西(这将是一个更短的正则表达式)并标记非匹配。