很久以前,我编写了一个名为detectBadChars(String)
检查 String 参数的所谓“坏”字符实例的方法。
坏字符的原始列表是:
- '~'
- '#'
- '@'
- '*'
- '+'
- '%'
我的方法,效果很好,是:
// Detects for the existence of bad chars in a string and returns the
// bad chars that were found.
protected String detectBadChars(String text) {
Pattern pattern = Pattern.compile("[~#@*+%]");
Matcher matcher = pattern.matcher(text);
StringBuilder violatorsBuilder = new StringBuilder();
if(matcher.find()) {
String group = matcher.group();
if (!violatorsBuilder.toString().contains(group))
violatorsBuilder.append(group);
}
return violatorsBuilder.toString();
}
业务逻辑现在发生了变化,以下现在也被认为是不好的:
- 回车 (
\r
) - 新行 (
\n
) - 选项卡 (
\t
) - 任何连续的空格(
" "
," "
等)
所以我正在尝试修改正则表达式以适应新的坏字符。将正则表达式更改为:
Pattern pattern = Pattern.compile("[~#@*+%\n\t\r[ ]+]");
...抛出异常。我的想法是在正则表达式中添加“\n\t\r”会分别分配换行符、制表符和 CR。然后添加"[ ]+"
添加一个由空格组成的新“类/组”,然后将该组量化为允许 1+ 个空格,有效地处理连续的空格。
我要去哪里,我的正则表达式应该是什么(为什么)?提前致谢!