【问题标题】:Regex to allow decimal numbers greater than 0 and less than 100正则表达式允许大于 0 且小于 100 的十进制数
【发布时间】:2014-12-11 04:38:54
【问题描述】:

我正在尝试输入大于 0 且小于 100 的值,并且我正在使用以下正则表达式:

/^(0+)?(99(\.99?)?|(\.99?)?|\.[0-9]+|0?[0-9](\.[0-9]{0,2})?|(0+)?[0-9][0-9](\.[0-9][0-9]?)?)$/

这个正则表达式不会抱怨零,但 0.01 是一个有效值。

基本上,我试图以00.00 格式获取值,并且具有0.01, 00.01, ... 99.99 之类的值也是可以接受的,但仅限于数字和点。

我正在使用

【问题讨论】:

  • 可能需要一段时间,但我不需要浮动格式。谢谢
  • 您要允许0.00 还是00.00

标签: javascript html javascript html regex


【解决方案1】:
^(?!0?0\.00$)\d{1,2}\.\d{2}$

你可以简单地使用这个。查看演示。

https://regex101.com/r/qB0jV1/10

【讨论】:

  • 这匹配 00.00,但我不希望这也是 0.00,0,00.00,00.0。这些没有任何意义。
  • 但这些值也可以接受:2、2.5、2.00、2.01。基本上到 99.99 是可以接受的。如果我的问题让您感到困惑,我很抱歉。
  • 这匹配 0.0,00.0 0.0 00.0
  • .85,.10 这些也是有效值,但上面的值不接受这个,请你看看...但是如果我输入 0.58 或 0.25 或 0.85 它接受..
  • 感谢您的耐心和帮助.. 它现在可以正常工作了。你真好...请给我一些时间会检查更多的值并在此处发布结果
【解决方案2】:

那么为什么你必须用一个复杂的正则表达式来打败自己。为什么不进行数字比较?

function validNum (num) {
   num = parserFloat(num);

   return num > 0 && num < 100;
}

只需要两位小数?

function validNum (num) {
   num = parseFloat((num + "").replace(/^(.*\.\d\d)\d*$/, '$1'));

   return num > 0 && num < 100;
}

Test Here

.5:      true
..5    : false
.005   : false
0.05   : true
99.99  : true
00.01  : true
00.00  : false
0.00   : false
00.0   : false
100.00 : false

【讨论】:

  • 绝对是正确的方法,但parseFloat 可能并不理想,因为它最终会忽略杂物。此外,他可能不想将小数部分截断为两位数,而只想接受两位数的输入。
  • @torazaburo 第二个功能是基于他所说的。 I am trying to get the value in a 00.00 format,第二个 parseFloat 不能对数字做任何棘手的事情,因为它在放入 parseFloat 之前格式化为 00.00
【解决方案3】:

我认为您不想允许0.0000.00

^(?!00?\.00$)\d{1,2}(?:\.\d{2})?$

^(?!00?\.00$)\d{1,2}(?:\.\d{1,2})?$

DEMO

开头的负前瞻(?!00?\.00$) 断言要匹配的数字不是00.000.00

【讨论】:

  • 但这些值也可以接受:2、2.5、2.00、2.01。基本上高达 99.99 是可以接受的。如果我的问题让您感到困惑,我很抱歉
  • 是的,它允许2.002.01。这就是你问的......大于 0.00 到 99.99。您能否简要解释一下您的问题。
  • 不允许2、3、5有效。
  • 只需将小数部分设为可选。看我的更新。 \.\d{1,2} 允许小数部分后一位或两位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多