package models import ( "crypto/md5" "crypto/rand" "encoding/hex" "regexp" "strings" "time" ) // 获取当前时间字符串 // 参数格式可选,默认"2006-01-02 15:04:05" func GetCurrentTimeString(format ...string) string { // 默认格式 layout := "2006_01_02-15_04_05.999999999" // 如果传入了格式参数则使用自定义格式 if len(format) > 0 { layout = format[0] } return time.Now().Format(layout) } func StringToTimePtr(str string) (*time.Time, error) { layout := "2006-01-02 15:04" t, err := time.Parse(layout, str) if err != nil { return nil, err } return &t, nil } func RandStr32() string { // 生成 32 字节 (256 位) 随机数据 b := make([]byte, 32) if _, err := rand.Read(b); err != nil { panic(err) } // 转换为 16 进制字符串 (长度 64) cookie := hex.EncodeToString(b) return cookie } func Md5Str(str string) string { hashBytes2 := md5.Sum([]byte(str)) hashString2 := hex.EncodeToString(hashBytes2[:]) // 注意数组转切片的[:] return hashString2 } func IsExpired(expireTime time.Time) bool { return expireTime.Before(time.Now()) } // 判断邮箱是否合法 func IsEmailValid(email string) bool { // 正则表达式(覆盖 99% 常见邮箱格式) pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$` regex := regexp.MustCompile(pattern) return regex.MatchString(email) } // 判断字符串是否包含标点符号 func IsContainsSpecialChar(str string) bool { specialChars := "!@#$%^&*()-+={}[]|\\:;\"'<>,.?/" return strings.ContainsAny(str, specialChars) }