登录
首页 >  Golang >  Go问答

对 time.Time 值进行验证的方法,使用 go-playground/validator.v9

来源:stackoverflow

时间:2024-02-18 21:48:24 243浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《对 time.Time 值进行验证的方法,使用 go-playground/validator.v9》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

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

在验证区域可以验证时间。时间吗?或者,如果需要一些正则表达式,我该如何在验证部分中做到这一点?

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

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

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

解决方案


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

如果您关心用户发送的格式,则必须更改字段的类型,即 dob string,如果还没有符合您要求的验证器,则必须添加custom validation function,因为 design 遗漏了内置 regex 验证器。

也许这有帮助?这是我对 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)

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>