我已检查以下链接以获取正则表达式
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位数也是真值,无效。
答案 0 :(得分:4)
您必须使用分隔符来确定匹配的开始位置和结束位置。你说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

答案 1 :(得分:0)
正则表达式并没有说字符串应该以最后一个字符结尾,或者从第一个字符开始。 尝试:
var patt = /^\d{1,2}(\.\d{1,2})?$/;
对于您之前的10位数字和要求之后的4位数字:
var patt = /^\d{1,10}(\.\d{1,4})?$/;
答案 2 :(得分:0)
你为什么不检查:
input < Math.pow(10,10) && input % Math.pow(10,-4) == 0
答案 3 :(得分:-1)
这是为我工作的代码
function IsValidNumericCode(number,messageDiv,msg){
var reNumeric = /^\d*[0-9](|.\d*[0-9]|,\d*[0-9])?$/;
var result = reNumeric.test(number); if(!result){ messageDiv.html(msg);
messageDiv.fadeIn(400).fadeOut(400).fadeIn(400).fadeOut(400).fadeIn(400);
}else{ messageDiv.html('');} return result;