本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

数据验证

go-playground/validator.v8进行验证

一、使用

使用structTag的binding,如:binding:“required”

如果没有_空值或者类型不匹配_就会报错,重定向到400 (Bad Request)

错误信息:Key: ‘User.Name’ Error:Field validation for ‘Name’ failed on the ‘required’ tag

示例代码:

type User struct {
Id int form:"id"
Name string form:"name" binding:"required" // 不为空校验
Age int form:"age"

}

func DoBind(context *gin.Context) {

var user User
err := context.ShouldBind(&user)
if err != nil {
fmt.Println(err)
context.JSON(400,gin.H{
“msg”:“fali”,
“code”:400,
})
}

context.JSON(200,gin.H{
“msg”:“success”,
“code”:200,
})

}

二、其他验证器

注意:

  • 多个验证器之间用英文输入法下的逗号(,)隔开,并且是按照验证器的顺序执行的

  • 如果希望在参数中包含逗号(即excludesall =,),则需要使用UTF-8十六进制表示形式0x2C

  • e.g.

validate:"excludesall=0x2C"

1.- 忽略字段,如:binding:"-"

2.required: 必填字段,如:binding:“required”

3.min 最小长度,如:binding:“min=10”

4.max 最大长度,如:binding:“max=10”

5.| 或,如:binding:“rgb|rgba”

6.structonly** ** 如果有嵌套,可以决定只验证结构体上的,binding:“structonly”

7.Exists

8.omitempty 省略空,如果为空,则不会继续验证该字段上其他的规则,只有不为空才会继续验证其他的,如max等

9.dive 嵌套验证

1.name [][]string binding:"gt=0,dive,len=1,dive,required"

// gt = 0将应用于[]
// len = 1将应用于[] string
//必填项将应用于字符串

2.name [][]string binding:"gt=0,dive,dive,required"

// gt = 0 将应用于[]
// []string 将保留验证
//必填项将应用于字符串

10.len 长度,如:binding:“len=10”

11.eq 等于,如:binding:“eq=10”

12.ne 不等于,如:binding:“ne=10”

13.gt 大于,如:binding:“gt=10”

14.gte 大于等于,如:binding:“gte=10”

15.lt 小于,如:binding:“lt=10”

16.lte 小于等于,如:binding:“lte=10”

注意:gt、gte、lt、lte等都可以用于时间的比较,后面不需要跟值,直接binding:“gt”,表示大于当前utc时间

17.eqfield 等于其他字段的值,如:Password string `binding:“eqfield=ConfirmPassword”`

18.nefield 不等于其他字段的值,

19.eqcsfield 类似eqfield,它会验证相对于顶层结构提供的字段,

如:eqcsfield = InnerStructField.Field)

20.necsfield

21.gtfield 大于其他字段的值

22.gtefield

23.gtcsfield

24.gtecsfield

25.ltfield 小于其他字段的值

26.ltefield

27.ltcsfield

28.ltecsfield

29.alpha 字符串值仅包含字母字符

30.alphanum 字符串值仅包含字母数字字符

31.numeric 字符串值包含基本数字值。基本不包括指数等…

32.hexadecimal 字符串值包含有效的十六进制

33.hexcolor 验证字符串值包含有效的十六进制颜色,包括井号(#)

34.rgb 字符串值包含有效的rgb颜色

35.rgba 字符串值包含有效的rgba颜色

36.HSL 字符串值包含有效的hsl颜色

37.hsla 字符串值包含有效的hsla颜色

38.email 字符串值包含有效的电子邮件

39.url 字符串值包含有效的网址,必须包含http://等

40.uri 字符串值包含有效的uri。它将接受golang请求uri接受的任何uri

41.base64 字符串值包含有效的base64值

42.contains 字符串值包含子字符串值,contains=@

43.containsany 包含所有,containsany =!@#?

44.containsrune 字符串值包含提供的符号 containsrune = @

45.excludes 字符串值不包含子字符串值,excludes = @

46.excludeall 排除所有

47.excluderune 字符串值不包含提供的符号,excluderune = @

48.isbn 国际标准书号,验证字符串值包含有效的isbn10或isbn13值。

49.isbn10 国际标准书号10, 验证字符串值包含有效的isbn10值。

50.isbn13 国际标准书号13,字符串值包含有效的isbn13值。

51.uuid 字符串值包含有效的UUID。

52.uuid3 字符串值包含有效的版本3 UUID

53.uuid4 字符串值包含有效的版本5 UUID。

54.uuid5 字符串值包含有效的版本5 UUID。

55.ascii 字符串值仅包含ASCII字符。注意:如果字符串为空,则验证为true。

56.asciiprint 字符串值仅包含可打印的ASCII字符。注意:如果字符串为空,则验证为true。

57.multibyte 字符串值包含一个或多个多字节字符。注意:如果字符串为空,则验证为true。

58.datauri 字符串值包含有效的DataURI。注意:这还将验证数据部分是有效的base64

59.latitude 纬度,字符串值包含有效的纬度

60.longitude 经度,字符串值包含有效的经度。

61.ssn 字符串值包含有效的美国社会安全号码

62.ip 字符串值包含有效的IP地址

63.ipv4 字符串值包含有效的v4 IP地址。

64.ipv6 字符串值包含有效的v6 IP地址。

65.cidr 字符串值包含有效的CIDR地址。

66.cidrv4 字符串值包含有效的CIDR地址。

67.cidrv6 字符串值包含有效的v6 CIDR地址。

68.tcp_addr 字符串值包含有效的可解析TCP地址。

max,len,min:

  • 对于数字,max将确保该值等于给定的参数。
  • 对于字符串,它将检查字符串长度是否恰好等于该字符数。
  • 对于切片,数组和地图,验证项目数

官方文档:

https://godoc.org/gopkg.in/go-playground/validator.v8#hdr-Baked_In_Validators_and_Tags

1407人已阅读,今天你学习了吗?

添加新回复
目录