我目前需要一个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也无效)可以帮助你。
答案 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)