diff options
Diffstat (limited to 'internal/gtsmodel')
-rw-r--r-- | internal/gtsmodel/filter.go | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/internal/gtsmodel/filter.go b/internal/gtsmodel/filter.go index e670e6fc0..95047a44f 100644 --- a/internal/gtsmodel/filter.go +++ b/internal/gtsmodel/filter.go @@ -20,6 +20,8 @@ package gtsmodel import ( "regexp" "time" + + "github.com/superseriousbusiness/gotosocial/internal/util" ) // Filter stores a filter created by a local account. @@ -61,14 +63,23 @@ type FilterKeyword struct { // Compile will compile this FilterKeyword as a prepared regular expression. func (k *FilterKeyword) Compile() (err error) { - var wordBreak string - if k.WholeWord != nil && *k.WholeWord { - wordBreak = `\b` + var ( + wordBreakStart string + wordBreakEnd string + ) + + if util.PtrOrZero(k.WholeWord) { + // Either word boundary or + // whitespace or start of line. + wordBreakStart = `(?:\b|\s|^)` + // Either word boundary or + // whitespace or end of line. + wordBreakEnd = `(?:\b|\s|$)` } // Compile keyword filter regexp. quoted := regexp.QuoteMeta(k.Keyword) - k.Regexp, err = regexp.Compile(`(?i)` + wordBreak + quoted + wordBreak) + k.Regexp, err = regexp.Compile(`(?i)` + wordBreakStart + quoted + wordBreakEnd) return // caller is expected to wrap this error } |