正则表达式:帮助匹配小于24的数字

时间:2016-07-15 14:33:22

标签: javascript regex pattern-matching

所以我正在制作这个正则表达式,以验证我为实习而设计的网站上的一些文本框。

问题在于,我对正则表达式并不那么热衷,而且我已经接近了一个与 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}}

5 个答案:

答案 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) - xyz
  • 之一

至于“为什么我的版本匹配像"a""az"部分”这样的东西 - 它有点复杂,但它基本上归结为使用点(比如.?)。在正则表达式中,点表示“任何一个字符”。为了使它与文字点匹配,你需要像我一样用斜杠来逃避它。

次要评论:如果您希望单个数字的可选前导零,请将1\d替换为[01]\d。如果您想要一位数字的强制性前导零,请将\d|1\d替换为[01]\d。如果您不想要前导零,请保持原样。

答案 1 :(得分:2)

假设你不想要05或5.50

^((?:[0-9]|1[0-9]|2[0-3])(?:\.(?:[1-9]|[0-9][1-9]))?)$

您可以尝试here

答案 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])$