正常表达一天的时间

时间:2013-02-21 12:40:06

标签: regex

我正在尝试为特定日期的时间创建正则表达式。它正确处理7am11:34pm。它应该能够识别不良形成的时间。现在我已经尝试为这个问题编写一个有效的正则表达式。

正则表达式 ^(([0]?[0-9])|([1][0-2]))(\:[00-59]{2})?(am|pm){1}\b

问题是,在antemeridiem中,小时部分从1(或01)到12不等,但在后期时间从0(或{{1}开始变化}}}到00。我无法推断这种情况的正则表达式。请帮助。

5 个答案:

答案 0 :(得分:2)

我不会开始争论12小时系统应该是什么样的,但只是按照给定/固定的要求使用你的要求:

  

问题在于,在antemeridiem中,小时部分从1(或01)到12不等,但是在postmeridiem中它从0(或00)到12变化。我无法推断出这种情况的正则表达式。请帮助。

然后,这个正则表达式应该可以工作:

^(((0?[1-9]|1[012])(:[0-5][0-9])?am)|((0?[0-9]|1[012])(:[0-5][0-9])?pm))\b

亲眼看看here

答案 1 :(得分:1)

您可以随时执行以下操作:

(我的正则表达式)| (我下午的正则表达式)

只要你的括号在正确的地方,它应该可以正常工作。

答案 2 :(得分:0)

尝试这样的事情:

^(0?[1-9]|1[0-2])(:([0-5]?[0-9]))?(am|pm)$

答案 3 :(得分:0)

这应符合您的要求。

^(([0]?[0-9])|([1][0-2])){1}(\:)?([0-5][0-9])?(am|pm){1}

此外,您正在尝试使用正则表达式匹配数字

[00-59]

我不认为它是这样的,你要匹配字符串,最好是[0-5] [0-9]。

答案 4 :(得分:0)

我也想为此找到一个好的正则表达式。我使用了一个名为Expresso的工具,并提出以下表达式进行12小时时间匹配:

((1{0,1}[012]{1})|[0-9]{1}){1}((:|\s)?[0-5]{1}[0-9]{1})?((a|p|A|P){1}(m|M){1})?

我针对以下数据进行了测试:

12:00
12am
11111111PM
pm
11122am
13
00am
9a

表达了以下匹配:

12:00
12am
1111
1111PM
1112
2am
1
3
0
0am
9

如果您要验证数据并将匹配项与数据长度进行比较,则可以抛弃从11111111PM11122am找到的部分匹配项。这对我有用。