我正在尝试编写一个函数来截断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