【问题标题】:How to validate hh:mma time format in Go?如何在 Go 中验证 hh:mm 时间格式?
【发布时间】:2016-10-01 13:19:17
【问题描述】:

我需要验证一个时间的时间格式是:hh:mma

例子:

09:00pm
09:00am
08:55pm
08:54am
1:00pm

我知道我需要为此使用 Go 的 regexp 包及其 MatchString 方法。但我无法弄清楚我需要传递给 MatchString 方法以实现我需要的模式。

我还搜索了一个可以使用的 Go 验证器包,而不是编写自己的验证器来验证时间格式,但我找不到适合我需要的。

【问题讨论】:

  • 您是否需要正则表达式来验证时间是否有效,例如 23:71am 无效?
  • 你并不真正需要这个正则表达式。
  • @coredump 你能提出什么解决方案?
  • @JohnKevinM.Basco 这样的事情:play.golang.org/p/SHcAHTUomW。我只是对你所说的做出反应:“我知道我需要使用 regexp 包”。有时使用正则表达式对于简单的任务来说太过分了。

标签: regex validation go


【解决方案1】:

这是一个以该格式验证 12 小时时间的正则表达式:

^(0?[1-9]|1[012]):([0-5][0-9])[ap]m$

Regex101 Tested

【讨论】:

  • @John 哎呀,我在测试中使用了错误的正则表达式。现已修复。
【解决方案2】:

这么晚了,但我想提出正则表达式之外的另一种解决方案。您可以使用 time 包来验证您的值,然后,如果需要,您可以稍后使用结果值。

package main

import (

  "fmt"
  "time"

)

func main() {

  Form := "3:04pm"
  timesToCheck := []string{"7:54pm", "09:00pm", "09:00am", "08:55pm", "08:54am", "1:00pm", "23:00am"}

  for _, v := range timesToCheck {
    if t, e := time.Parse(Form, v); e != nil {
      fmt.Println(e.Error())
    } else {
      fmt.Printf("%#v\n", t)
    }
  }

}

这将为您提供以下信息:

time.Time{sec:-31550760, nsec:0, loc:(*time.Location)(0x1811e0)}
time.Time{sec:-31546800, nsec:0, loc:(*time.Location)(0x1811e0)}
time.Time{sec:-31590000, nsec:0, loc:(*time.Location)(0x1811e0)}
time.Time{sec:-31547100, nsec:0, loc:(*time.Location)(0x1811e0)}
time.Time{sec:-31590360, nsec:0, loc:(*time.Location)(0x1811e0)}
time.Time{sec:-31575600, nsec:0, loc:(*time.Location)(0x1811e0)}
parsing time "23:00am": hour out of range

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-18
    • 2011-04-27
    • 2022-01-08
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    相关资源
    最近更新 更多