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

Javascript 正则表达式:帮助匹配小于24的数字,javascript,regex,pattern-matching,Javascript,Regex,Pattern Matching,所以我制作这个正则表达式是为了验证我为实习设计的网站上的一些文本框 问题是我对正则表达式不太感兴趣,我很快就能找到一个匹配0-24到不超过两位小数的有效表达式 这就是我目前所拥有的。模式也匹配任何字符串;例如,“a”或“az” 要获取0到24(不包括24)之间的数字,可选择小数点后两位,请执行以下操作: ^(\d|1\d|2[0-3])(\.\d{1,2})?$ 小数部分: \。-匹配小数点 \d{1,2}-一位或两位数字 ()?-使其成为可选的 整个部分: \d-数字0-9 1\d

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

问题是我对正则表达式不太感兴趣,我很快就能找到一个匹配0-24到不超过两位小数的有效表达式

这就是我目前所拥有的。模式也匹配任何字符串;例如,
“a”
“az”


要获取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
。如果不需要前导零,请保持原样。

要获得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
。如果不需要前导零,请保持原样。

下面是一个快速尝试,将0到24.99之间的浮点数与最多两个非零数字进行匹配

^(([0-9])|([01][0-9])|(2[0-4]))(\.[0-9]{1,2})?$ 

我想用数学来做这件事可能会更容易

下面是将0到24.99之间的浮点数与最多两个非零数字进行匹配的快速尝试

^(([0-9])|([01][0-9])|(2[0-4]))(\.[0-9]{1,2})?$ 

我想用数学来做这件事可能会更容易

假设您不想要05或5.50

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

如果您不想要05或5.50,您可以试一试

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

你可以试试它,你可以看到整个正则表达式的解释,也可以测试它。我还添加了一些测试用例

^(\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

您可以查看整个正则表达式的解释,也可以对其进行测试。我还添加了一些测试用例

^(\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


要获取介于1和23之间的整数:
^([1-9]| 1[0-9]| 2[0-3])$

要获取介于1和23之间的整数:
^([1-9]| 1[0-9]| 2[0-3])$
为什么要对regex执行此操作。。当然,如果您愿意,您可以这样做,但这似乎很容易在没有正则表达式的情况下解决。:-)@DylanMeeus OP可能想使用HTML5输入模式属性?除此之外,我还推荐一个更具可读性的替代方案。@le_mYes!这正是我使用它的目的,当用户输入错误时,我会结合一些角度向用户显示警告。你提到的“a”或“az”是什么。请指定您希望正则表达式完全执行的操作。@2manyints使用各自的边界作为替代方法如何?为什么要使用正则表达式执行此操作。。当然,如果您愿意,您可以这样做,但这似乎很容易在没有正则表达式的情况下解决。:-)@DylanMeeus OP可能想使用HTML5输入模式属性?除此之外,我还推荐一个更具可读性的替代方案。@le_mYes!这正是我使用它的目的,当用户输入错误时,我会结合一些角度向用户显示警告。你提到的“a”或“az”是什么。请指定您希望正则表达式完全执行的操作。@2manyints如何使用各自的边界作为替代?既然问题是“帮助匹配一个小于24的数字”,为什么您需要匹配
24-24.99
范围?既然问题是“帮助匹配一个小于24的数字”,为什么您需要匹配
24-24.99
范围“帮助匹配小于24的数字“?谢谢你的快速解释!你的答案比我的可读性强得多!谢谢你的快速解释!你的答案比我的可读性强得多!是的,04仍然大于0小于24。有些人确实会在单位数之前输入0,以避免在高度关键的系统中出现错误。但我们不希望小数点之前的数字超过2位。添加了测试用例,这应该会澄清这一点。是的,04仍然大于0,小于24。有些人确实会在个位数之前输入0,以避免在高度关键的系统中出现错误。但我们不希望小数点之前的位数超过2位。添加了测试用例,应该可以澄清这一点。