1
1
package tools
2
2
3
3
import (
4
+ "regexp"
4
5
"strings"
5
6
"unicode"
6
7
@@ -10,6 +11,12 @@ import (
10
11
// H is a shortcut for map[string]interface{}
11
12
type H map [string ]interface {}
12
13
14
+ // 是否全为英文
15
+ func isEnglish (str string ) bool {
16
+ match , _ := regexp .MatchString (`^[A-Za-z]+$` , str )
17
+ return match
18
+ }
19
+
13
20
// 是否全为中文
14
21
func isChinese (s string ) bool {
15
22
for _ , r := range s {
@@ -20,12 +27,57 @@ func isChinese(s string) bool {
20
27
return true
21
28
}
22
29
30
+ /*
31
+ 由于名称的各种组合情况都有,在转换成拼音时也遇到各种各样的问题。这里做一下简单说明,以后将不再处理类似兼容问题,目前兼容如下情况。
32
+ 1.如果名字中有横杠或者下划线连接,将会删去下划线再处理
33
+ 2.全是中文:直接转拼音
34
+ 3.全是英文:不进行处理,原文呈现
35
+ 4.如果是中英混合,那么分以下几种情况
36
+ 1.开头是中文,结尾不是中文:进入Convert逻辑第一种
37
+ 2.开头不是中文,结尾不是中文:进入Convert逻辑第一种
38
+ 3.开头不是中文,结尾是中文:进入Convert逻辑第三种
39
+
40
+ 如再有其他情况,将不再进行兼容处理!!!
41
+ */
42
+
43
+ func ConvertToPinYin (src string ) string {
44
+ if strings .Contains (src , "-" ) {
45
+ src = strings .ReplaceAll (src , "-" , "" )
46
+ }
47
+ if strings .Contains (src , "_" ) {
48
+ src = strings .ReplaceAll (src , "_" , "" )
49
+ }
50
+ return Convert (src )
51
+ }
52
+
23
53
// 将中文内容转成拼音
24
- func ConvertToPinYin (s string ) (ret string ) {
25
- if isChinese (s ) {
26
- ret = strings .Join (pinyin .LazyConvert (s , nil ), "" )
27
- } else {
28
- ret = s
54
+ func Convert (src string ) string {
55
+ var dst string
56
+ if isChinese (src ) { // 全是中文
57
+ return strings .Join (pinyin .LazyConvert (src , nil ), "" )
58
+ }
59
+ if isEnglish (src ) { // 全是英文
60
+ return src
29
61
}
30
- return
62
+
63
+ han := regexp .MustCompile ("([\u4e00 -\u9fa5 ]+)" )
64
+ srcIndex := han .FindAllStringIndex (src , - 1 )
65
+
66
+ if srcIndex [0 ][0 ] == 0 { // 开头是中文
67
+ dst = strings .ReplaceAll (src , src [srcIndex [0 ][0 ]:srcIndex [0 ][1 ]], strings .Join (pinyin .LazyConvert (src [srcIndex [0 ][0 ]:srcIndex [0 ][1 ]], nil ), "" )+ "-" )
68
+ }
69
+ if srcIndex [0 ][0 ] > 0 && srcIndex [0 ][1 ] < len (src ) { // 中间是中文
70
+ dst = strings .ReplaceAll (src , src [srcIndex [0 ][0 ]:srcIndex [0 ][1 ]], "-" + strings .Join (pinyin .LazyConvert (src [srcIndex [0 ][0 ]:srcIndex [0 ][1 ]], nil ), "" )+ "-" )
71
+ }
72
+
73
+ if srcIndex [0 ][1 ] == len (src ) { // 结尾是中文
74
+ dst = strings .ReplaceAll (src , src [srcIndex [0 ][0 ]:srcIndex [0 ][1 ]], "-" + strings .Join (pinyin .LazyConvert (src [srcIndex [0 ][0 ]:srcIndex [0 ][1 ]], nil ), "" ))
75
+ }
76
+
77
+ dstIndex := han .FindAllStringIndex (dst , - 1 )
78
+ if len (dstIndex ) == 0 {
79
+ return dst
80
+ }
81
+
82
+ return Convert (dst )
31
83
}
0 commit comments