【问题标题】:Accept decimal value upto 99.99接受最高 99.99 的十进制值
【发布时间】:2014-12-01 09:29:05
【问题描述】:

创建了一个演示 DEMO,它按我的预期工作,但我无法在 24.99 之后添加任何值,但我需要的值可以达到 99.99

尝试修改演示 regex,但没有按预期工作。

这是Regex

^(0+)?(24(\.00?)?|(\.00?)?|\.[0-9]+|0?[0-9](\.[0-9]{0,2})?|(0+)?[0-2][0-3](\.[0-9][0-9]?)?)$

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 把开头附近的24改成99?
  • 根据您的评论,为什么不function isValidInput(value) { var val = parseFloat(value); return !isNaN(val) && val >= 0 && val <= 99.99; } - jsfiddle.net/scek2xyg - 更快更安全

标签: javascript regex floating-point decimal


【解决方案1】:
^(0+)?(99(\.99?)?|(\.99?)?|\.[0-9]+|0?[0-9](\.[0-9]{0,2})?|(0+)?[0-9][0-9](\.[0-9][0-9]?)?)$

试试这个。查看演示。

http://regex101.com/r/oK7eW9/11

【讨论】:

  • function isValidInput(value) { var re = /^(0+)?(99(\.99?)?|(\.99?)?|\.[0-9]+ |0?[0-9](\.[0-9]{0,2})?|(0+)?[0-9][0-9](\.[0-9][0- 9]?)?)$/;返回重新测试(值); }这就是我使用的方式,但它接受一切。
  • 是的,你是对的,但我没有在这里指出任何错误,请纠正我犯的错误,这就是我给出我使用的方法的原因。谢谢,请不要介意。
【解决方案2】:

这将匹配0.00 - 99.99 到任意小数位,以及像.4343. 这样的边缘情况:

^0*((((9[0-8]?)|([0-8][0-9]?))?(\.[0-9]*)?)|(99(\.(([0-8][0-9]*)|(9(90*|([0-8][0-9]*))))?)?))$

See Demo

注意它也会匹配一个空字符串,所以你应该先检查一下。

尽管根据您对 vks 的回答的评论,将值转换为浮点数然后检查它是否为范围会更快更安全:

function isValidInput(value) {
    var val = parseFloat(value);
    return !isNaN(val) && val >= 0 && val <= 99.99;
}

Demo Fiddle

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2019-01-23
    相关资源
    最近更新 更多