mirror of
https://github.com/unti-io/go-utils.git
synced 2025-10-03 23:46:27 +08:00
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"github.com/spf13/cast"
|
|
"regexp"
|
|
)
|
|
|
|
// Unity - 统一规范化
|
|
var Unity *UnityStruct
|
|
|
|
type UnityStruct struct{}
|
|
|
|
// Ids 参数归一化
|
|
func (this *UnityStruct) Ids(param ...any) (ids []any) {
|
|
|
|
fn := func(param any) (ids []any) {
|
|
|
|
types := []string{"string", "int", "int64", "float", "float64"}
|
|
|
|
if InArray(Get.Type(param), types) {
|
|
// 正则提取数字部分
|
|
item := regexp.MustCompile(`\d+`).FindAllString(cast.ToString(param), -1)
|
|
for _, val := range item {
|
|
ids = append(ids, cast.ToInt(val))
|
|
}
|
|
|
|
}
|
|
if Get.Type(param) == "slice" {
|
|
item := cast.ToStringSlice(param)
|
|
for _, val := range item {
|
|
ids = append(ids, cast.ToInt(val))
|
|
}
|
|
}
|
|
return ids
|
|
}
|
|
|
|
for _, val := range param {
|
|
ids = append(ids, fn(val)...)
|
|
}
|
|
|
|
return ArrayUnique(ArrayEmpty(ids))
|
|
}
|
|
|
|
// Keys 参数归一化
|
|
func (this *UnityStruct) Keys(param any, reg ...any) (keys []any) {
|
|
|
|
// 正则表达式
|
|
var regex string
|
|
if len(reg) > 0 {
|
|
regex = cast.ToString(reg[0])
|
|
} else {
|
|
regex = `[^,]+`
|
|
}
|
|
|
|
if Get.Type(param) == "string" {
|
|
|
|
item := regexp.MustCompile(regex).FindAllString(cast.ToString(param), -1)
|
|
|
|
for _, val := range item {
|
|
keys = append(keys, val)
|
|
}
|
|
}
|
|
if Get.Type(param) == "slice" {
|
|
item := cast.ToStringSlice(param)
|
|
for _, val := range item {
|
|
keys = append(keys, val)
|
|
}
|
|
}
|
|
|
|
return ArrayUnique(ArrayEmpty(keys))
|
|
}
|