118 lines
4.2 KiB
Go
118 lines
4.2 KiB
Go
package str
|
||
|
||
import (
|
||
"regexp"
|
||
"strconv"
|
||
"strings"
|
||
)
|
||
|
||
// HideSensitivity 返回防敏感化后的字符串
|
||
// - 隐藏身份证、邮箱、手机号等敏感信息用*号替代
|
||
func HideSensitivity(str string) (result string) {
|
||
if str == "" {
|
||
return "***"
|
||
}
|
||
if strings.Contains(str, "@") {
|
||
res := strings.Split(str, "@")
|
||
if len(res[0]) < 3 {
|
||
resString := "***"
|
||
result = resString + "@" + res[1]
|
||
return result
|
||
}
|
||
resRs := []rune(str)
|
||
res2 := string(resRs[0:3])
|
||
resString := res2 + "***"
|
||
result = resString + "@" + res[1]
|
||
return result
|
||
} else {
|
||
reg := `^1[0-9]\d{9}$`
|
||
rgx := regexp.MustCompile(reg)
|
||
mobileMatch := rgx.MatchString(str)
|
||
if mobileMatch {
|
||
rs := []rune(str)
|
||
result = string(rs[0:5]) + "****" + string(rs[7:11])
|
||
return
|
||
}
|
||
nameRune := []rune(str)
|
||
lens := len(nameRune)
|
||
|
||
if lens <= 1 {
|
||
result = "***"
|
||
} else if lens == 2 {
|
||
result = string(nameRune[:1]) + "*"
|
||
} else if lens == 3 {
|
||
result = string(nameRune[:1]) + "*" + string(nameRune[2:3])
|
||
} else if lens == 4 {
|
||
result = string(nameRune[:1]) + "**" + string(nameRune[lens-1:lens])
|
||
} else if lens > 4 {
|
||
result = string(nameRune[:2]) + "***" + string(nameRune[lens-2:lens])
|
||
}
|
||
return
|
||
}
|
||
}
|
||
|
||
// ThousandsSeparator 返回将str进行千位分隔符处理后的字符串。
|
||
func ThousandsSeparator(str string) string {
|
||
length := len(str)
|
||
if length < 4 {
|
||
return str
|
||
}
|
||
arr := strings.Split(str, ".") //用小数点符号分割字符串,为数组接收
|
||
length1 := len(arr[0])
|
||
if length1 < 4 {
|
||
return str
|
||
}
|
||
count := (length1 - 1) / 3
|
||
for i := 0; i < count; i++ {
|
||
arr[0] = arr[0][:length1-(i+1)*3] + "," + arr[0][length1-(i+1)*3:]
|
||
}
|
||
return strings.Join(arr, ".") //将一系列字符串连接为一个字符串,之间用sep来分隔。
|
||
}
|
||
|
||
// KV 返回str经过转换后形成的key、value
|
||
// - 这里tag表示使用什么字符串来区分key和value的分隔符。
|
||
// - 默认情况即不传入tag的情况下分隔符为“=”。
|
||
func KV(str string, tag ...string) (string, string) {
|
||
tagChar := "="
|
||
if len(tag) > 0 {
|
||
tagChar = tag[0]
|
||
}
|
||
kv := strings.SplitN(str, tagChar, 2)
|
||
if len(kv) < 2 {
|
||
return "", ""
|
||
}
|
||
return kv[0], kv[1]
|
||
}
|
||
|
||
// FormatSpeedyInt 返回numberStr经过格式化后去除空格和“,”分隔符的结果
|
||
// - 当字符串为“123,456,789”的时候,返回结果为“123456789”。
|
||
// - 当字符串为“123 456 789”的时候,返回结果为“123456789”。
|
||
// - 当字符串为“1 23, 45 6, 789”的时候,返回结果为“123456789”。
|
||
func FormatSpeedyInt(numberStr string) (int, error) {
|
||
return strconv.Atoi(strings.ReplaceAll(strings.ReplaceAll(numberStr, " ", ""), ",", ""))
|
||
}
|
||
|
||
// FormatSpeedyInt64 返回numberStr经过格式化后去除空格和“,”分隔符的结果
|
||
// - 当字符串为“123,456,789”的时候,返回结果为“123456789”。
|
||
// - 当字符串为“123 456 789”的时候,返回结果为“123456789”。
|
||
// - 当字符串为“1 23, 45 6, 789”的时候,返回结果为“123456789”。
|
||
func FormatSpeedyInt64(numberStr string) (int64, error) {
|
||
return strconv.ParseInt(strings.ReplaceAll(strings.ReplaceAll(numberStr, " ", ""), ",", ""), 10, 64)
|
||
}
|
||
|
||
// FormatSpeedyFloat32 返回numberStr经过格式化后去除空格和“,”分隔符的结果
|
||
// - 当字符串为“123,456,789.123”的时候,返回结果为“123456789.123”。
|
||
// - 当字符串为“123 456 789.123”的时候,返回结果为“123456789.123”。
|
||
// - 当字符串为“1 23, 45 6, 789.123”的时候,返回结果为“123456789.123”。
|
||
func FormatSpeedyFloat32(numberStr string) (float64, error) {
|
||
return strconv.ParseFloat(strings.ReplaceAll(strings.ReplaceAll(numberStr, " ", ""), ",", ""), 32)
|
||
}
|
||
|
||
// FormatSpeedyFloat64 返回numberStr经过格式化后去除空格和“,”分隔符的结果
|
||
// - 当字符串为“123,456,789.123”的时候,返回结果为“123456789.123”。
|
||
// - 当字符串为“123 456 789.123”的时候,返回结果为“123456789.123”。
|
||
// - 当字符串为“1 23, 45 6, 789.123”的时候,返回结果为“123456789.123”。
|
||
func FormatSpeedyFloat64(numberStr string) (float64, error) {
|
||
return strconv.ParseFloat(strings.ReplaceAll(strings.ReplaceAll(numberStr, " ", ""), ",", ""), 64)
|
||
}
|