Files
YunShu/pkg/termui/validate.go

68 lines
1.1 KiB
Go
Raw Normal View History

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
}
}