需要Reg表达式来查找小数范围

时间:2012-09-03 09:54:15

标签: javascript regex

我目前需要一个reg表达式来评估小数范围。

要求如下

1)点后可以只允许1或2个小数位,或者也可以允许整数(例如)1234,123.4,1245.78有效

2)范围应在9999(例如)9999.0,9998.99,9999.00之间 - 有效| 9999.01,10000.00 - 无效

3)不要求前导或尾随零

到目前为止,我一直试图在写这个reg表达式之前实现

/^[0-9]\d{1,4}(\.\d{1,2})?$/.test(value);

...但是无法继续设置范围直到数字9999(因为9999.01也无效)可以帮助你。

4 个答案:

答案 0 :(得分:2)

为什么不直接应用正则表达式来确定你的字符串是否为有效的digit with dots浮点数,然后将其强制转换为数字,并发现它大于9999。

Regexp满足您的需求可能非常复杂,并且从客户端获取太多CPU。

答案 1 :(得分:0)

以下是适合您的快速和肮脏的事情:http://regex101.com/r/vK1jM3

/^(?(?=9999)9999(?:\.0+)?|\d{1,4}(?:\.\d{1,2})?)$/gm

我只处理9999

的特例

答案 2 :(得分:0)

就我所知,这是有效的:

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

测试出来:

var monstrosity = /^(9999(?!\.[1-9])(?!\.0[1-9])\.[0-9]{1,2}|9999|(?!9999)[0-9]{1,4}|(?!9999)[0-9]{1,4}\.[0-9]{1,2})$/;

console.log(monstrosity.test("9999.00")); // true
console.log(monstrosity.test("9999.01")); // false
console.log(monstrosity.test("9999")); // true
console.log(monstrosity.test("9998.4")); // true
console.log(monstrosity.test("0")); // true
console.log(monstrosity.test("0.5")); // true

如果你在代码库中添加这样的东西,未来的维护程序员会用干草叉追捕你。尝试解决范围检查而不使用正则表达式,如webbandit建议的那样。

答案 3 :(得分:0)

为什么要使用正则表达式?只是做

x > 0 && x <= 9999 && (x*100 - Math.floor(x*100) == 0)