正则表达式用于匹配HH:MM时间格式。
正则表达式用于匹配HH:MM时间格式的问题,可能是因为之前尝试的方法都没有成功。最后使用的正则表达式为^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$ (js engine)
。
逻辑:
小时的第一个数字可以是:
- 0到19之间的数字,允许单个数字出现,表示为[0-1]?[0-9]
或者
- 20到23之间的数字,表示为2[0-3]
分钟的数字始终为00到59之间的数字,表示为[0-5][0-9]
(不允许单个数字出现)。
在第一个方括号中不需要使用破折号,[01]
同样有效。
以下是修改后只接受12小时制时间的答案(包括可选的前导零):^(0?[1-9]|1[0-2]):[0-5][0-9]$
使用^([0-1][0-9]|2[0-3]):[0-5][0-9]$
可以强制要求前导零。
正则表达式用于匹配HH:MM时间格式
在这篇文章中,我们将介绍正则表达式来匹配不同的时间格式。下面是几种常见的时间格式和相应的正则表达式:
1. HH:MM 12小时制,可选的前导0
正则表达式:/^(0?[1-9]|1[0-2]):[0-5][0-9]$/
2. HH:MM 12小时制,可选的前导0,必需的上午/下午标识(AM/PM)
正则表达式:/((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
3. HH:MM 24小时制,带有前导0
正则表达式:/^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
4. HH:MM 24小时制,可选的前导0
正则表达式:/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
5. HH:MM:SS 24小时制,带有前导0
正则表达式:/(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)/
这些正则表达式可以用于验证时间格式的输入。你可以根据自己的需求选择其中的一个。
如果你要匹配带有上午/下午标识的12小时制时间字符串,需要注意测试"13:00 PM"时该正则表达式会返回true,因为字符串中的"3:00 PM"部分是有效的。可以通过以下if语句解决这个问题:
let res = value.match(regex); if (res && res[0] === value) { doSomething(); }
关于第一个示例中末尾的`\d`,是多余的,它只能匹配3位数的分钟。应该使用`[0-9]`或`\d`,而不是两者同时出现,以避免匹配3位数的分钟。已经更新了答案。
关于第四个示例中的正则表达式`^([0-1][0-9]|2[0-3]):[0-5][0-9]$`,为什么不简单地使用`^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$`?实际上,使用正则表达式有多种方法可以达到相同的结果。可以根据个人的偏好和可读性选择其中之一。
如果你遇到了在字符串中包含其他单词的情况,例如“time is 12:34 is rainy outside”,只需要将正则表达式开头和结尾的字符串匹配去掉即可。例如,对于HH:MM 24小时制带有前导0的正则表达式,可以使用`(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]`。
关于24:00这个时间,根据我所知,它是无效的。在23:59之后,会到达00:00,表示第二天的开始(你说24:00等于00:00),但在编程中,我们只使用00:00表示当前一天的结束以及下一天的开始。
希望以上内容对你有所帮助!
正则表达式用于匹配HH:MM时间格式的原因可能是因为需要验证用户输入的时间是否符合指定的格式要求。下面给出了一些解决该问题的方法。
第一个给出的正则表达式存在缺陷,例如无法匹配04:00
。下面给出了一个更好的解决方法:
^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$
这个正则表达式用于匹配无前导零的时间。有前导零的时间的正则表达式是^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
。
请仔细阅读他的答案,他的答案适用于有和没有前导零的情况。
另外一个稍微简短的形式是^(?:\d|[01]\d|2[0-3]):[0-5]\d$
,在C#中也能正常工作。
在JavaScript中不要忘记添加前导和尾随斜杠!
请注意,这个正则表达式不支持24:00,如果需要支持请自行调整。
如果需要包含秒的版本可以使用^([0-9]|0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){1,2}$
。
在0[0-9]|1[0-9]|2[0-3]
之前应该是[0-9]
吗?比如当时间是21
时,[0-9]
会先匹配第一个数字。
抱歉,但为什么不直接使用^([0-1][0-9]|2[0-3]):[0-5][0-9]$
呢?对于HH:MM而言,不匹配H:MM。
在处理包含换行符的输入时,请考虑使用\A…\z
代替^…$
。