为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 go-playground/validator.v9 验证 time.Time 值?

如何使用 go-playground/validator.v9 验证 time.Time 值?

Go
呼啦一阵风 2022-07-11 16:37:00
我想在我的结构上验证这个字符串,它是可选的。在验证区域是否可以验证 time.Time?或者如果需要一些正则表达式,我怎么能在验证部分做到这一点?DOB           time.Time          `json:"dob,omitempty" bson:"dob,omitempty" validate:"omitempty"`它将由用户通过 JSON 传入,我希望确认用户传入的格式是正确的:"2001-03-24T16:21:21.269Z"
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

也许这可以帮助?这是我为我的 ISO8601 格式日期时间所做的


CreatedAt           string  `json:"created_at" validate:"ISO8601date"


func IsISO8601Date(fl validator.FieldLevel) bool {

    ISO8601DateRegexString := "^(?:[1-9]\\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d{1,9})?(?:Z|[+-][01]\\d:[0-5]\\d)$"

    ISO8601DateRegex := regexp.MustCompile(ISO8601DateRegexString)

  return ISO8601DateRegex.MatchString(fl.Field().String())

}


validate = validator.New()

_ = validate.RegisterValidation("ISO8601date", IsISO8601Date)


查看完整回答
反对 回复 2022-07-11
?
精慕HU

TA贡献1845条经验 获得超8个赞

该类型time.Time不是一种string类型,因此您不能对其执行任何“类似字符串”的操作。这意味着您无法检查它是否具有某种格式,同样您也不能对其使用正则表达式。

如果您关心用户发送的格式,则必须更改字段的类型,即DOB string,如果还没有符合您要求的验证器,则必须添加自定义验证功能,因为内置regex验证器被设计遗漏了。


查看完整回答
反对 回复 2022-07-11
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信