作者: 张首富
时间: 2021-04-13
w x: Y18163201
我们在任何编程语言中,都有传递的参数是否合法的需求,在 go 中我们可以引用下面的包直接来校验传递的参数是否合法
go get -u github.com/astaxie/beego/validation
package main
import (
"fmt"
"github.com/astaxie/beego/validation"
)
func main() {
name := "123"
valid := validation.Validation{}
fmt.Println(valid.Required(name,"name").Message("名称不能为空"))
name = ""
fmt.Println(valid.Required(name,"name").Message("名称不能为空"))
}
运行得到的结果为:
$ go run main.go
&{ true}
&{名称不能为空 false}
// 必填 测试参数是否为非零和非空(如果是字符串或列表)
func (v *Validation) Required(obj interface{}, key string) *Result {
return v.apply(Required{key}, obj)
}
举例
name := "123"
valid := validation.Validation{}
valid.Required(name,"name").Message("名称不能为空")
// MinSize 如果类型是字符串或切片,测试 obj 长度最小长度是否大于 min。
func (v *Validation) MinSize(obj interface{}, min int, key string) *Result {
return v.apply(MinSize{min, key}, obj)
}
举例
name = "123"
valid.MinSize(name,5,"name").Message("名称不得低于5个字符")
// MaxSize 如果类型是字符串或切片,测试obj长度是否小于max。
func (v *Validation) MaxSize(obj interface{}, max int, key string) *Result {
return v.apply(MaxSize{max, key}, obj)
}
举例
name := "123"
valid.MaxSize(name,100,"name").Message("名称最长为 100 个字符")
// Length 如果类型是字符串或切片,测试obj长度是否等于 n 的长度。
func (v *Validation) Length(obj interface{}, n int, key string) *Result {
return v.apply(Length{n, key}, obj)
}
// Min 如果类型是 int 类型,那么判断 obj 是否大于 min,大于为真
func (v *Validation) Min(obj interface{}, min int, key string) *Result {
return v.apply(Min{min, key}, obj)
}
举例
age := 30
fmt.Println(valid.Min(age,20,"age").Message("值应该大于 20"))
// Max 如果类型是 int 类型,那么判断 obj 是否小于 max,小于为真
func (v *Validation) Max(obj interface{}, max int, key string) *Result {
return v.apply(Max{max, key}, obj)
}
举例
age := 30
fmt.Println(valid.Min(age,20,"age").Message("值应该小于20"))
// Range 如果obj的类型是int,则测试obj在mni和max之间。
func (v *Validation) Range(obj interface{}, min, max int, key string) *Result {
return v.apply(Range{Min{Min: min}, Max{Max: max}, key}, obj)
}
// Alpha 如果类型是字符串,测试obj是[a-zA-Z]。
func (v *Validation) Alpha(obj interface{}, key string) *Result {
return v.apply(Alpha{key}, obj)
}
举例
name = "AsadsB"
fmt.Println(valid.Alpha(name,"name").Message("不是纯字符串"))
name = "AdasdasBdasd*"
fmt.Println(valid.Alpha(name,"name").Message("不是纯字符串"))
name = "!qaz2wsx"
fmt.Println(valid.Alpha(name,"name").Message("不是纯字符串"))
// Numeric 如果类型是字符串,测试obj是[0-9]。
func (v *Validation) Numeric(obj interface{}, key string) *Result {
return v.apply(Numeric{key}, obj)
}
// AlphaNumeric 如果类型是字符串,测试obj是[0-9a-zA-Z]。
func (v *Validation) AlphaNumeric(obj interface{}, key string) *Result {
return v.apply(AlphaNumeric{key}, obj)
}
// Match 如果类型是字符串,测试obj是否与regexp匹配
func (v *Validation) Match(obj interface{}, regex *regexp.Regexp, key string) *Result {
return v.apply(Match{regex, key}, obj)
}
// NoMatch Test that the obj doesn't match regexp if type is string
func (v *Validation) NoMatch(obj interface{}, regex *regexp.Regexp, key string) *Result {
return v.apply(NoMatch{Match{Regexp: regex}, key}, obj)
}
// Email 如果obj 是字符串,判断他的格式否是为正确的 email 格式
func (v *Validation) Email(obj interface{}, key string) *Result {
return v.apply(Email{Match{Regexp: emailPattern}, key}, obj)
}
举例
name = "zsf18163201@163.com"
fmt.Println(valid.Email(name,"name").Message("不是合法的 email 地址"))
name = "zsf18163201.com"
fmt.Println(valid.Email(name,"name").Message("不是合法的 email 地址"))
// IP 如果类型为字符串,测试obj是否为IP地址。
func (v *Validation) IP(obj interface{}, key string) *Result {
return v.apply(IP{Match{Regexp: ipPattern}, key}, obj)
}
// Mobile 如果类型为字符串,测试obj是否为中国手机号码。
func (v *Validation) Mobile(obj interface{}, key string) *Result {
return v.apply(Mobile{Match{Regexp: mobilePattern}, key}, obj)
}
// HasErrors Has ValidationError nor not.
func (v *Validation) HasErrors() bool {
return len(v.Errors) > 0
}