你如何在正则表达式中匹配12小时hh:mm?

Adr*_*rli 5 php regex time datetime

你如何在正则表达式中匹配12小时的时间 - 换句话说匹配12:30而不是14:74?谢谢!

Kei*_*ith 17

这应该工作:

([1-9]|1[012]):[0-5][0-9]
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 16

这是一个问题的例子,"嘿,我知道,我会使用正则表达式!" 是错误的解决方案.您可以使用正则表达式检查输入格式是否为数字 - 数字 - 冒号 - 数字,然后使用编程逻辑确保值在您期望的范围内.例如:

/(\d\d?):(\d\d)/

if ($1 >= 1 && $1 <= 12 && $2 < 60) {
    // result is valid 12-hour time
}
Run Code Online (Sandbox Code Playgroud)

这比您在其他答案中看到的一些混淆的正则表达式示例更容易阅读和理解.


Eli*_*Eli 6

^(00|0[0-9]|1[012]):[0-5][0-9] ?((a|p)m|(A|P)M)$
Run Code Online (Sandbox Code Playgroud)

^ - 匹配字符串的开头.

(00|0[0-9]|1[012]) - 任何两位数字,最多12个.需要两位数.

: - 匹配冒号

[0-5][0-9] - 匹配00到59之间的任何两位数字.

? - 匹配空间零或一次.

((a|p)m|(A|P)M) - 匹配上午或下午,不区分大小写.

$ - 匹配字符串的结尾.