+FilterEmoji
This commit is contained in:
@@ -225,6 +225,22 @@ func FilterMb4(content string) string {
|
|||||||
return newContent.String()
|
return newContent.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 是否是修饰符,比如控制EMOJI的颜色控制符,ZWJ
|
||||||
|
func IsDecorateRune(value rune) bool {
|
||||||
|
return value == 0xFE0F || value == 0xFE0E || value == 0x200D
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterEmoji(content string) string {
|
||||||
|
newContent := &strings.Builder{}
|
||||||
|
for _, value := range []rune(content) {
|
||||||
|
size := utf8.RuneLen(value)
|
||||||
|
if size >= 1 && size <= 3 && !(value >= 0x2300 && value < 0x32A0 || value >= 0x1F000 && value < 0x1F9F0) && !IsDecorateRune(value) {
|
||||||
|
newContent.WriteRune(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newContent.String()
|
||||||
|
}
|
||||||
|
|
||||||
func TrimBlankChar(str string) string {
|
func TrimBlankChar(str string) string {
|
||||||
return strings.Trim(str, "\n\r\t ")
|
return strings.Trim(str, "\n\r\t ")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ func BenchmarkFilterMb4(b *testing.B) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFilterMb4(t *testing.T) {
|
func TestFilterEmoji(t *testing.T) {
|
||||||
for _, v := range [][]string{
|
for _, v := range [][]string{
|
||||||
[]string{
|
[]string{
|
||||||
`
|
`
|
||||||
@@ -143,11 +143,11 @@ func TestFilterMb4(t *testing.T) {
|
|||||||
"abcd中国人",
|
"abcd中国人",
|
||||||
},
|
},
|
||||||
[]string{
|
[]string{
|
||||||
"日配冷藏❄❄",
|
"a❄️日配冷藏❄❄🀄A❄️",
|
||||||
"日配冷藏❄❄",
|
"a日配冷藏A",
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
str := FilterMb4(v[0])
|
str := FilterEmoji(v[0])
|
||||||
if str != v[1] {
|
if str != v[1] {
|
||||||
t.Fatalf("%s failed\nshould be:%s\nbut it's:%s", v[0], v[1], str)
|
t.Fatalf("%s failed\nshould be:%s\nbut it's:%s", v[0], v[1], str)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user