我希望允许人们以各种格式在文本框中输入时间。其中一种格式可以是:
2h
2 小时,或
2.5h
2个半小时
我想使用正则表达式来识别该模式,但由于某种原因它没有识别它:
我有:
var hourRegex = /^\d{1,2}[\.\d+]?[h|H]$/;
适用于 2h
,但不适用于 2.5h
。
我认为这个正则表达式意味着 - 从字符串的开头开始,有一个或两个数字,然后没有或一个小数点,如果存在,则必须后跟一个或多个数字,然后有一个 h
或 H
然后它一定是字符串的结尾。
我尝试过正则表达式工具here但运气不佳。
最佳答案
/^\d{1,2}(?:\.\d+)?h$/i;
使用圆括号代替方括号。
- 从头开始
- 一位或两位数字
- 可选:一个点,后跟至少一位数字
- 以
h
结尾 - 不区分大小写
正则表达式教程
[...]
- 方括号表示:提供范围内的任何内容。[^...]
表示:匹配不在给定范围内的字符(...)
- 括号的意思是:将我分组。或者,组的第一个字符可以以以下形式开头:?:
- 不要引用我(我,I = 组)?=
- 不要让我参加比赛,尽管我必须在这里?!
- 我此时可能不会出现
{a,b}
、{a,}
表示:至少a
,最多 >b
个字符。省略b
= 无穷大+
表示:至少一次,尽可能匹配等价于{1,}
*
表示:尽可能匹配等价于{0,}
+?
和*?
与前面描述的效果相同,但有一点不同:尽可能少匹配
示例
[a-z] One character, any character between a, b, c, ..., z
(a-z) Match "a-z", and group it
[^0-9] Match any non-number character
另请参阅
- MDN: Regular Expressions - 更详细的指南
关于JavaScript RegExp 匹配(部分)小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705440/