Files
YunShu/pkg/termui/validate.go
titor d2b9b2c4bb refactor: 项目结构重组,src/ 扁平化为根目录,提取 pkg/ 子包
- 模块名重命名 yunshu -> hub.gaomia.site/titor/YunShu
- Go 版本升级 1.21 -> 1.25
- src/ 目录删除,所有文件移至根目录
- 新增 pkg/mdprint/: Markdown AST 解析+ANSI 渲染
- 新增 pkg/style/: 终端颜色样式(8色 ANSI + 24位真彩色)
- 新增 pkg/termui/: 终端输入组件(交互式输入/密码/确认)
- 更新文档:AGENTS.md、architecture.md、changelog.md、taolun.md
- gitignore 通配符修复 yunshu.exe -> yunshu.exe*
2026-05-09 03:55:56 +08:00

68 lines
1.1 KiB
Go

package termui
import (
"fmt"
"strings"
)
type Validator func(string) error
var (
NonEmpty Validator = func(v string) error {
if v == "" {
return fmt.Errorf("不能为空")
}
return nil
}
IsURL Validator = func(v string) error {
if !strings.HasPrefix(v, "http://") && !strings.HasPrefix(v, "https://") {
return fmt.Errorf("必须以 http:// 或 https:// 开头")
}
return nil
}
)
func MaxLength(n int) Validator {
return func(v string) error {
if len(v) > n {
return fmt.Errorf("不能超过 %d 个字符", n)
}
return nil
}
}
func MinLength(n int) Validator {
return func(v string) error {
if len(v) < n {
return fmt.Errorf("至少需要 %d 个字符", n)
}
return nil
}
}
func And(vv ...Validator) Validator {
return func(v string) error {
for _, fn := range vv {
if err := fn(v); err != nil {
return err
}
}
return nil
}
}
func Or(vv ...Validator) Validator {
return func(v string) error {
var lastErr error
for _, fn := range vv {
if err := fn(v); err == nil {
return nil
} else {
lastErr = err
}
}
return lastErr
}
}