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

我想在我的结构上验证这个字符串,它是可选的。

在验证区域是否可以验证 time.Time?或者如果需要一些正则表达式,我怎么能在验证部分做到这一点?

DOB           time.Time          `json:"dob,omitempty" bson:"dob,omitempty" validate:"omitempty"`

它将由用户通过 JSON 传入,我希望确认用户传入的格式是正确的:

"2001-03-24T16:21:21.269Z"


呼啦一阵风
浏览 94回答 2
2回答

HUX布斯

也许这可以帮助?这是我为我的 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)

精慕HU

该类型time.Time不是一种string类型,因此您不能对其执行任何“类似字符串”的操作。这意味着您无法检查它是否具有某种格式,同样您也不能对其使用正则表达式。如果您关心用户发送的格式,则必须更改字段的类型,即DOB string,如果还没有符合您要求的验证器,则必须添加自定义验证功能,因为内置regex验证器被设计遗漏了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go