2

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

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

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

4

5 回答 5

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

在这里亲自看看。

于 2013-02-21T14:08:25.097 回答
1

你总是可以做类似的事情:

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

只要您的括号在正确的位置,它应该可以正常工作。

于 2013-02-21T13:37:32.913 回答
0

尝试这样的事情:

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

于 2013-02-21T13:56:13.197 回答
0

这应该符合您的要求。

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

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

[00-59]

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

于 2013-02-21T14:54:44.307 回答
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

如果您正在验证数据并将匹配项与数据长度进行比较,则可以丢弃从11111111PM和找到的部分匹配项11122am。这对我有用。

于 2014-08-15T15:41:13.047 回答