Filters: Make behavior of "whole word" filters consistent with the web UI when filters are non-alphanumeric (#1623)

* Fix tests build

* Make behavior of non-alphanumeric whole-word filters consistent with the web UI.
Fixes #1543

* Fix typo in filter tests
This commit is contained in:
Levi Bard 2020-01-06 16:16:54 +01:00 committed by Konrad Pozniak
commit 9d65b2ace1
3 changed files with 24 additions and 3 deletions

View file

@ -95,6 +95,7 @@ public abstract class SFragment extends BaseFragment implements Injectable {
private static List<Filter> filters;
private boolean filterRemoveRegex;
private Matcher filterRemoveRegexMatcher;
private static Matcher alphanumeric = Pattern.compile("^\\w+$").matcher("");
@Inject
public MastodonApi mastodonApi;
@ -520,8 +521,11 @@ public abstract class SFragment extends BaseFragment implements Injectable {
}
private static String filterToRegexToken(Filter filter) {
String phrase = Pattern.quote(filter.getPhrase());
return filter.getWholeWord() ? String.format("(^|\\W)%s($|\\W)", phrase) : phrase;
String phrase = filter.getPhrase();
String quotedPhrase = Pattern.quote(phrase);
return (filter.getWholeWord() && alphanumeric.reset(phrase).matches()) ? // "whole word" should only apply to alphanumeric filters, #1543
String.format("(^|\\W)%s($|\\W)", quotedPhrase) :
quotedPhrase;
}
public static void flushFilters() {