所以我正在制作这个正则表达式,以验证我为实习而设计的网站上的一些文本框。
问题在于,我对正则表达式并不那么热衷,而且我已经接近了一个与 0-24 之间的数字相匹配的工作表达式,并且不会超过小数点后两位。
这是我到目前为止所拥有的。该模式也匹配任何字符串;例如,"az"
或var pattern = "^([0-9]{0,2}?.?[0-9]{0,2}|1[0-9].?[0-9]{0,2}|2[0-4].?[0-9]{0,2})$";
。
{{1}}
答案 0 :(得分:5)
要获得0到24之间的数字(24除外),最多可选两位小数:
^(\d|1\d|2[0-3])(\.\d{1,2})?$
小数部分:
\.
- 匹配小数点\d{1,2}
- 一位或两位数字()?
- 将其设为可选整个部分:
\d
- 数字0-9 1\d
- 数字10-19 2[0-3]
- 数字20-23 (x|y|z)
- x
,y
或z
至于“为什么我的版本匹配像"a"
和"az"
部分”这样的东西 - 它有点复杂,但它基本上归结为使用点(比如.?
)。在正则表达式中,点表示“任何一个字符”。为了使它与文字点匹配,你需要像我一样用斜杠来逃避它。
次要评论:如果您希望单个数字的可选前导零,请将1\d
替换为[01]\d
。如果您想要一位数字的强制性前导零,请将\d|1\d
替换为[01]\d
。如果您不想要前导零,请保持原样。
答案 1 :(得分:2)
答案 2 :(得分:0)
以下是快速尝试匹配从0到24.99的浮点数与最多两个非零数字
^(([0-9])|([01][0-9])|(2[0-4]))(\.[0-9]{1,2})?$
我认为使用数学可能更容易做到这一点......
答案 3 :(得分:0)
您可以查看整个正则表达式的解释并测试here。我还添加了一些测试用例。
^(\d|[01]\d|2[0-3])(\.\d{1,2})?$
测试用例:
Valid:
22
1.29
2.99
9.99
13.24
17.38
20.01
02.15
15.35
23.56
1.1
Invalid:
24.29
235.215
21.256
答案 4 :(得分:0)
获取 1 到 23 之间的整数:^([1-9]|1[0-9]|2[0-3])$