diff --git a/public/tools/type.go b/public/tools/type.go index 178040c..405e797 100644 --- a/public/tools/type.go +++ b/public/tools/type.go @@ -1,90 +1,20 @@ package tools -import ( - "regexp" - "strings" - "unicode" - - "github.com/mozillazg/go-pinyin" -) +import "github.com/mozillazg/go-pinyin" // H is a shortcut for map[string]interface{} type H map[string]interface{} -// 是否全为英文 -func isEnglish(str string) bool { - match, _ := regexp.MatchString(`^[A-Za-z]+$`, str) - return match -} +func ConvertToPinYin(src string) (dst string) { + args := pinyin.NewArgs() + args.Fallback = func(r rune, args pinyin.Args) []string { + return []string{string(r)} + } -// 是否为英文与数字组合 -func isEnglishAndNum(str string) bool { - match, _ := regexp.MatchString(`^[a-zA-Z0-9_-]+$`, str) - return match -} - -// 是否全为中文 -func isChinese(s string) bool { - for _, r := range s { - if !unicode.Is(unicode.Han, r) { - return false + for _, singleResult := range pinyin.Pinyin(src, args) { + for _, result := range singleResult { + dst = dst + result } } - return true -} - -/* -由于名称的各种组合情况都有,在转换成拼音时也遇到各种各样的问题。这里做一下简单说明,以后将不再处理类似兼容问题,目前兼容如下情况。 - 1.如果名字中有横杠或者下划线连接,将会删去下划线再处理 - 2.全是中文:直接转拼音 - 3.全是英文:不进行处理,原文呈现 - 4.英文与数字组合,不进行处理,原文呈现 - 5.如果是中英混合,那么分以下几种情况 - 1.开头是中文,结尾不是中文:进入Convert逻辑第一种 - 2.开头不是中文,结尾不是中文:进入Convert逻辑第一种 - 3.开头不是中文,结尾是中文:进入Convert逻辑第三种 - - 如再有其他情况,将不再进行兼容处理!!! -*/ - -func ConvertToPinYin(src string) string { - if strings.Contains(src, "-") { - src = strings.ReplaceAll(src, "-", "") - } - if strings.Contains(src, "_") { - src = strings.ReplaceAll(src, "_", "") - } - return Convert(src) -} - -// 将中文内容转成拼音 -func Convert(src string) string { - var dst string - if isChinese(src) { // 全是中文 - return strings.Join(pinyin.LazyConvert(src, nil), "") - } - if isEnglish(src) || isEnglishAndNum(src) { // 全是英文,或者为英文与数字组合 - return src - } - - han := regexp.MustCompile("([\u4e00-\u9fa5]+)") - srcIndex := han.FindAllStringIndex(src, -1) - - if srcIndex[0][0] == 0 { // 开头是中文 - dst = strings.ReplaceAll(src, src[srcIndex[0][0]:srcIndex[0][1]], strings.Join(pinyin.LazyConvert(src[srcIndex[0][0]:srcIndex[0][1]], nil), "")+"-") - } - if srcIndex[0][0] > 0 && srcIndex[0][1] < len(src) { // 中间是中文 - dst = strings.ReplaceAll(src, src[srcIndex[0][0]:srcIndex[0][1]], "-"+strings.Join(pinyin.LazyConvert(src[srcIndex[0][0]:srcIndex[0][1]], nil), "")+"-") - } - - if srcIndex[0][1] == len(src) { // 结尾是中文 - dst = strings.ReplaceAll(src, src[srcIndex[0][0]:srcIndex[0][1]], "-"+strings.Join(pinyin.LazyConvert(src[srcIndex[0][0]:srcIndex[0][1]], nil), "")) - } - - dstIndex := han.FindAllStringIndex(dst, -1) - if len(dstIndex) == 0 { - return dst - } - - return Convert(dst) + return }