我已经检查了下面的正则表达式链接
Regex to match 2 digits, optional decimal, two digits
正则表达式应接受整数或小数点。最大长度为小数前10位,小数后4位。
从上面的链接(2位小数点)尝试下面的代码
\d{0,2}(\.\d{1,2})?
var patt =new RegExp("\d{0,2}(\.\d{1,2})?")
undefined
patt.test(1)
true
patt.test(1.1)
true
patt.test(11)
true
patt.test(111.111)
true对于小数点后的3位数,也会给出真值,这是无效的。
发布于 2016-08-25 14:54:34
您必须使用分隔符来确定匹配的开始位置和结束位置。你说max length should be 10 numbers before decimal and 4 digits after decimal,所以你的限制也是不正确的:
var patt = /^\d{1,10}(\.\d{1,4})?$/;
var patt = new RegExp(/^\d{1,10}(\.\d{1,4})?$/);
console.log( patt.test(1) ); // true
console.log( patt.test(1.1) ); // true
console.log( patt.test(11.11) ); // true
console.log( patt.test(111.111) ); // true
console.log( patt.test(1111.1111) ); // true
console.log( patt.test(1111111111.1111) ); // true
console.log( patt.test(111.11111) ); // false, because to long after decimal
console.log( patt.test(11111111111.1111) ); // false, because to long before decimal
或者按照这里的建议,不使用RegExp,而使用文本。在某些浏览器中,RegExp可能存在支持问题。输出是相同的,所以最好使用这个解决方案:
var patt = /^\d{1,10}(\.\d{1,4})?$/;
console.log( patt.test(1) ); // true
console.log( patt.test(1.1) ); // true
console.log( patt.test(11.11) ); // true
console.log( patt.test(111.111) ); // true
console.log( patt.test(1111.1111) ); // true
console.log( patt.test(1111111111.1111) ); // true
console.log( patt.test(111.11111) ); // false, because to long after decimal
console.log( patt.test(11111111111.1111) ); // false, because to long before decimal
发布于 2016-08-25 14:50:16
正则表达式没有说字符串应该以最后一个字符结束,或者从第一个字符开始。尝试:
var patt = /^\d{1,2}(\.\d{1,2})?$/;对于要求之前的10位数和要求后的4位数:
var patt = /^\d{1,10}(\.\d{1,4})?$/;发布于 2016-08-25 15:15:59
你为什么不直接检查一下:
input < Math.pow(10,10) && input % Math.pow(10,-4) == 0https://stackoverflow.com/questions/39138440
复制相似问题