···11+package search
22+33+import (
44+ "regexp"
55+)
66+77+// U+3040 - U+30FF: hiragana and katakana (Japanese only)
88+// U+FF66 - U+FF9F: half-width katakana (Japanese only)
99+var japaneseRegex = regexp.MustCompile(`[\x{3040}-\x{30ff}\x{ff66}-\x{ff9f}]`)
1010+1111+// helper to check if an input string contains any Japanese-specific characters (hiragana or katakana). will not trigger on CJK characters which are not specific to Japanese
1212+func containsJapanese(text string) bool {
1313+ return japaneseRegex.MatchString(text)
1414+}
+23
search/japanese_test.go
···11+package search
22+33+import (
44+ "testing"
55+66+ "github.com/stretchr/testify/assert"
77+)
88+99+func TestJapaneseDetection(t *testing.T) {
1010+ assert := assert.New(t)
1111+1212+ assert.False(containsJapanese(""))
1313+ assert.False(containsJapanese("basic english"))
1414+ assert.False(containsJapanese("basic english"))
1515+1616+ assert.True(containsJapanese("学校から帰って熱いお風呂に入ったら力一杯がんばる"))
1717+ assert.True(containsJapanese("パリ"))
1818+ assert.True(containsJapanese("ハリー・ポッター"))
1919+ assert.True(containsJapanese("some japanese パリ and some english"))
2020+2121+ // CJK, but not japanese-specific
2222+ assert.False(containsJapanese("熱力学"))
2323+}