🔧

Redmineの検索でキーワードの区切りに全角スペースが使えるようにするためのパッチ

2022/10/21に公開1

(対象バージョン: Redmine 5.0)

Redmineの画面右上の検索ボックスと、チケットのテキスト形式のフィルタ(例:題名、説明、コメント)では、複数のキーワードを半角スペースで区切って入力することでAND検索が行える。ただし、現状では全角スペース(U+3000)はキーワードの区切りとしては認識されない。

以下の変更を行うことで全角スペースもキーワードの区切りとして使えるようになる。実際には全角スペース(U+3000)だけでなくUnicodeで Space Separator として定められている文字もすべて単語の区切りとして使えるようになる。

diff --git a/lib/redmine/search.rb b/lib/redmine/search.rb
index bf8b7633a..3c1e0700c 100644
--- a/lib/redmine/search.rb
+++ b/lib/redmine/search.rb
@@ -135,7 +135,7 @@ module Redmine
       def tokens
         # extract tokens from the question
         # eg. hello "bye bye" => ["hello", "bye bye"]
-        tokens = @question.scan(%r{((\s|^)"[^"]+"(\s|$)|\S+)}).collect {|m| m.first.gsub(%r{(^\s*"\s*|\s*"\s*$)}, '')}
+        tokens = @question.scan(%r{(([[:space:]]|^)"[^"]+"([[:space:]]|$)|[[:^space:]]+)}).collect {|m| m.first.gsub(%r{(^[[:space:]]*"[[:space:]]*|[[:space:]]*"[[:space:]]*$)}, '')}
         # tokens must be at least 2 characters long
         # but for Chinese characters (Chinese HANZI/Japanese KANJI), tokens can be one character
         # no more than 5 tokens to search for

[:space:] = 空白、改行、復帰 (Space_Separator | Line_Separator | Paragraph_Separator | 0009 | 000A | 000B | 000C | 000D | 0085)

Discussion