Ai
1 Star 0 Fork 0

FlyQRCode/mutils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
StrFuncs.go 4.96 KB
一键复制 编辑 原始数据 按行查看 历史
FlyQRCode 提交于 2025-04-21 17:52 +08:00 . 添加数据验证包
package valifuncs
import (
"fmt"
"regexp"
"strings"
"unicode/utf8"
)
// StrTrim 基础字符串处理函数
func StrTrim(value string) (string, error) {
return strings.TrimSpace(value), nil
}
// StrTrimLeft 去除左侧空格
func StrTrimLeft(value string) (string, error) {
return strings.TrimLeft(value, " \t\n\r"), nil
}
// StrTrimRight 去除右侧空格
func StrTrimRight(value string) (string, error) {
return strings.TrimRight(value, " \t\n\r"), nil
}
// StrTrimAll 去除两侧空格
func StrTrimAll(value string) (string, error) {
return strings.Trim(value, " \t\n\r"), nil
}
// StrToLower 字符串转为小写
func StrToLower(value string) (string, error) {
return strings.ToLower(value), nil
}
// StrToUpper 字符串转为大写
func StrToUpper(value string) (string, error) {
return strings.ToUpper(value), nil
}
// MaxLen 字符串最大长度验证
func MaxLen(maxLen int) func(value string) error {
return func(value string) error {
if utf8.RuneCountInString(value) > maxLen {
return fmt.Errorf("长度不能超过%d个字符", maxLen)
}
return nil
}
}
// MinLen 字符串最小长度验证
func MinLen(minLen int) func(value string) error {
return func(value string) error {
if utf8.RuneCountInString(value) < minLen {
return fmt.Errorf("长度不能少于%d个字符", minLen)
}
return nil
}
}
// StrNotEmpty 字符串不能为空验证
func StrNotEmpty() func(value string) error {
return func(value string) error {
if len(strings.TrimSpace(value)) == 0 {
return fmt.Errorf("不能为空字符串")
}
return nil
}
}
// ExactLen 字符串长度必须等于指定长度验证
func ExactLen(length int) func(value string) error {
return func(value string) error {
if utf8.RuneCountInString(value) != length {
return fmt.Errorf("长度必须等于%d个字符", length)
}
return nil
}
}
// Contains 字符串必须包含指定子串验证
func Contains(substr string) func(value string) error {
return func(value string) error {
if !strings.Contains(value, substr) {
return fmt.Errorf("必须包含'%s'", substr)
}
return nil
}
}
// NotContains 字符串不能包含指定子串验证
func NotContains(substr string) func(value string) error {
return func(value string) error {
if strings.Contains(value, substr) {
return fmt.Errorf("不能包含'%s'", substr)
}
return nil
}
}
// StrInList 字符串必须包含指定子串列表验证
func StrInList(subList []string) func(value string) error {
return func(value string) error {
for _, substr := range subList {
if !strings.Contains(value, substr) {
return fmt.Errorf("不能包含'%s'", substr)
}
}
return nil
}
}
// StartsWith 字符串必须以指定子串开头验证
func StartsWith(prefix string) func(value string) error {
return func(value string) error {
if !strings.HasPrefix(value, prefix) {
return fmt.Errorf("必须以'%s'开头", prefix)
}
return nil
}
}
// EndsWith 字符串必须以指定子串结尾验证
func EndsWith(suffix string) func(value string) error {
return func(value string) error {
if !strings.HasSuffix(value, suffix) {
return fmt.Errorf("必须以'%s'结尾", suffix)
}
return nil
}
}
// MatchRegex 字符串必须匹配指定正则表达式验证
func MatchRegex(pattern string) func(value string) error {
return func(value string) error {
matched, err := regexp.MatchString(pattern, value)
if err != nil {
return fmt.Errorf("正则表达式无效: %v", err)
}
if !matched {
return fmt.Errorf("格式不符合要求")
}
return nil
}
}
// 常用预设验证 示例:Email, PhoneCN, Username, Password
var (
EnLower = SloveAll[string](
"无法去除空格,且不能识别小写字母",
StrTrim,
StrToLower,
)
EnUpper = SloveAll[string](
"无法去除空格,且不能识别大写字母",
StrTrim,
StrToUpper,
)
Email = MatchRegex(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)
PhoneCN = MatchRegex(`^1[3-9]\d{9}$`)
Username = ValidateAll[string](
"用户名只能由字母、数字、下划线组成,且长度在4-20个字符之间",
MinLen(4),
MaxLen(20),
MatchRegex(`^[a-zA-Z0-9_]+$`),
)
Password = ValidateAll[string](
"用户名必须包含大写字母、小写字母和数字,且长度在8-32个字符之间",
MinLen(8),
MaxLen(32),
MatchRegex(`[A-Z]`),
MatchRegex(`[a-z]`),
MatchRegex(`[0-9]`),
)
)
// ValidateAll 组合验证函数
func ValidateAll[T any](msg string, validators ...func(T) error) func(T) error {
return func(value T) error {
for _, validator := range validators {
if err := validator(value); err != nil {
return fmt.Errorf("%s: %v", msg, err)
}
}
return nil
}
}
// SloveAll 组合处理函数
func SloveAll[T any](msg string, sloves ...func(T) (T, error)) func(T) (T, error) {
return func(value T) (T, error) {
var err error
newValue := value
for _, slove := range sloves {
newValue, err = slove(newValue)
if err != nil {
return value, fmt.Errorf("%s: %v", msg, err)
}
}
return newValue, nil
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/zybzb/mutils.git
git@gitee.com:zybzb/mutils.git
zybzb
mutils
mutils
v0.0.7

搜索帮助