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