first commit
This commit is contained in:
144
pkg/helper/string_util.go
Normal file
144
pkg/helper/string_util.go
Normal file
@ -0,0 +1,144 @@
|
||||
package helper
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
PhotoDomainUrl = "https://photo-app.ddegame.cn/"
|
||||
TimeLayout = "2006-01-02 15:04:05"
|
||||
DateLayout = "2006-01-02"
|
||||
DateLayoutShort = "20060102"
|
||||
)
|
||||
|
||||
func FullPhotoUrl(path string) string {
|
||||
if len(path) == 0 {
|
||||
return ""
|
||||
}
|
||||
if strings.Index(path, "http") == 0 {
|
||||
return path
|
||||
}
|
||||
return PhotoDomainUrl + path
|
||||
}
|
||||
|
||||
func Md5ForList(s ...string) string {
|
||||
sort.Strings(s)
|
||||
h := md5.New()
|
||||
h.Write([]byte(strings.Join(s, "")))
|
||||
return hex.EncodeToString(h.Sum(nil))
|
||||
}
|
||||
|
||||
func StringToInt(source string) int {
|
||||
target, _ := strconv.Atoi(source)
|
||||
return target
|
||||
}
|
||||
|
||||
func StringToInt64(source string) int64 {
|
||||
target, _ := strconv.Atoi(source)
|
||||
return int64(target)
|
||||
}
|
||||
|
||||
func StringToFloat(source string) float64 {
|
||||
target, _ := strconv.ParseFloat(source, 64)
|
||||
return target
|
||||
}
|
||||
|
||||
func StringIntPlus(s1, s2 string) string {
|
||||
return strconv.Itoa(StringToInt(s1) + StringToInt(s2))
|
||||
}
|
||||
|
||||
func StringIntMultiply(s1, s2 string) string {
|
||||
return strconv.Itoa(StringToInt(s1) * StringToInt(s2))
|
||||
}
|
||||
|
||||
func StringIntSub(s1, s2 string) string {
|
||||
return strconv.Itoa(StringToInt(s1) - StringToInt(s2))
|
||||
}
|
||||
|
||||
func StringFloatSub(s1, s2 string) string {
|
||||
return strconv.FormatFloat(StringToFloat(s1)-StringToFloat(s2), 'f', -1, 64)
|
||||
}
|
||||
|
||||
func ListToSet(list []string) (set []string) {
|
||||
m := make(map[string]bool, 0)
|
||||
for i := range list {
|
||||
m[list[i]] = true
|
||||
}
|
||||
for k := range m {
|
||||
set = append(set, k)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func ToJson(source interface{}) []byte {
|
||||
b, _ := json.Marshal(source)
|
||||
return b
|
||||
}
|
||||
|
||||
func NowTimeToString() string {
|
||||
return time.Now().Format(TimeLayout)
|
||||
}
|
||||
|
||||
func NowTimeIncreaseString(t time.Duration) string {
|
||||
now := time.Now()
|
||||
now.Add(t)
|
||||
return now.Format(TimeLayout)
|
||||
}
|
||||
|
||||
func NowDateToString() string {
|
||||
return time.Now().Format(DateLayout)
|
||||
}
|
||||
|
||||
func NowDateToStringShort() string {
|
||||
return time.Now().Format(DateLayoutShort)
|
||||
}
|
||||
|
||||
func Md5(s string) string {
|
||||
h := md5.New()
|
||||
h.Write([]byte(s))
|
||||
return hex.EncodeToString(h.Sum(nil))
|
||||
}
|
||||
|
||||
func ZeroFillByStr(str string, resultLen int, reverse bool) string {
|
||||
if len(str) > resultLen || resultLen <= 0 {
|
||||
return str
|
||||
}
|
||||
if reverse {
|
||||
return fmt.Sprintf("%0*s", resultLen, str) //不足前置补零
|
||||
}
|
||||
result := str
|
||||
for i := 0; i < resultLen-len(str); i++ {
|
||||
result += "0"
|
||||
}
|
||||
return result
|
||||
|
||||
}
|
||||
|
||||
func IsMobile(no string) bool {
|
||||
return regexp.MustCompile("^1[3456789]\\d{9}$").MatchString(no)
|
||||
}
|
||||
|
||||
func IsEmail(email string) bool {
|
||||
pattern := `^[0-9a-z][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$`
|
||||
return regexp.MustCompile(pattern).MatchString(email)
|
||||
}
|
||||
|
||||
func LegalUsername(source string) bool {
|
||||
return regexp.MustCompile("^\\D[\\w-]{5,17}$").MatchString(source)
|
||||
}
|
||||
|
||||
func LegalShortUsername(source string) bool {
|
||||
return regexp.MustCompile("^[a-zA-Z][\\w-]{2,17}$").MatchString(source)
|
||||
}
|
||||
|
||||
func LegalPassword(source string) bool {
|
||||
return regexp.MustCompile("^[a-zA-Z0-9,.!@#$%^&*()_-]{6,18}$").MatchString(source)
|
||||
}
|
||||
Reference in New Issue
Block a user