正则表达时间:分钟(小时> 24)

时间:2010-01-04 18:03:36

标签: .net regex time hour

我想在.NET中使用Regex 验证提取 小时和分钟来自字符串。 只是恢复两个数字,由:分隔(或不分开)。接受的格式 h:mm。未接受的:mh:

编辑: 需要注意的是,小时的数量可能会超过23,直到... 32

数小时(超过32)和分钟(超过59)的溢出我将在值恢复后进行(int.Parse)


* 只是为了好玩可能有一个相对简单的正则表达式,可以过滤> 32小时和> 59分钟(分钟它可能是[0-5]*[0-9],我知道几个小时)?

4 个答案:

答案 0 :(得分:8)

你死在正则表达式上吗?因为DateTime.Parse在这里会更简单,更强大。

 DateTime dt = DateTime.Parse("12:30 AM");

然后dt为您提供了解时间所需的一切。如果您不太确定它是时间字符串,DateTime.TryParse()可能会更好。

答案 1 :(得分:2)

(?:(\d\d?):)?([0-5][0-9])

如果您想验证时间:

(?:([01]?[0-9]|2[0-3]):)?([0-5][0-9])

编辑:已经过测试和更正。


但是,执行此操作的最佳方法是使用DateTime.ParseExact,如下所示:(已测试)

TimeSpan time = DateTime.ParseExact(
    input, 
    new string[] { "HH:mm", "H:mm", "mm", "%m" }, //The % is necessary to prevent it from being interpreted as a single-character standard format.
    CultureInfo.InvariantCulture, DateTimeStyles.None
).TimeOfDay;

要进行验证,您可以使用TryParseExact

答案 2 :(得分:1)

这是正则表达式字符串。您可以访问命名的捕获组“小时”和“分钟”。使用标记“ExplicitCapture”和“Singleline”。

@ “^((小于小时> [0-9] {1,2}):)?(?<&分钟GT; [0-9] {1,2})$”

您可以在此处测试正则表达式:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

如上所述,除非您需要验证只允许此表单,否则DateTime解析调用可能会更好。

此外,不允许使用负值,也不允许使用小数。 (但是,如果需要,可以更改正则表达式以包含它们。)

答案 3 :(得分:0)

最后,验证(直到32)并获取值的代码是(vb.net版本):

Dim regexHour As New Regex( _ 
   "((?<hours>([012]?\d)|(3[01]))\:)?(?<minutes>[0-5]?\d)", _
    RegexOptions.ExplicitCapture)
Dim matches As MatchCollection = regexHour.Matches(value)

If matches.Count = 1 Then
  With matches(0)
    ' (!) The first group is always the expression itself. '
    If .Groups.Count = 3 Then ' hours : minutes '
      strHours = .Groups("hours").Value
      If String.IsNullOrEmpty(strHours) Then strHours = "0"
      strMinutes = .Groups("minutes").Value
    Else ' there are 1, 3 or > 3 groups '
      success = False
    End If
  End With
Else
  success = False
End If

感谢大家为这个答案做出贡献!