我正在嘗試編寫一個函數來截斷golang中包含特殊字符的字符串。一個例子是下面Golang截斷具有特殊字符但不破壞數據的字符串
"H㐀〾▓朗퐭텟şüöžåйкл¤"
但是基於允許的字符數我這樣做並切斷它在中間。這會導致數據被損壞。
結果出來像
H㐀〾▓朗퐭텟şüöžå�...
的�
不應該存在。我們如何檢測這些特殊字符並根據這些字符的長度來分割它們?
package main
import (
"fmt"
"regexp"
)
var reNameBlacklist = regexp.MustCompile(`(&|>|<|\/|:|\n|\r)*`)
var maxFileNameLength = 30
// SanitizeName sanitizes user names in an email
func SanitizeName(name string, limit int) string {
result := name
reNameBlacklist.ReplaceAllString(result, "")
if len(result) > limit {
result = result[:limit] + "..."
}
return result
}
func main() {
str := "H㐀〾▓朗퐭텟şüöžåйкл¤"
fmt.Println(str)
strsan := SanitizeName(str, maxFileNameLength)
fmt.Println(strsan)
}
與問題代碼的一個區別是當限制開始時的「...」。我試圖從_shortened_字符串中去除黑名單字符,但是您要麼改變含義('santitize(「>>> abc「,3)'變成'」...「'而不是'」abc ...「')或者必須使代碼複雜化。 – twotwotwo
我們現在的邏輯首先剝離字符串,這就是爲什麼我保留後來截斷 – Sakib