函数 validateDecimal(数字,maxDigits) { eval("var stringvar=/^[-+]?([0-9]*\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/"); 返回 stringvar.test(number); }
我写了上面的函数来验证十进制数。变量'maxDigits'用于指定小数部分的位数,'number'作为要验证的值。但是当我尝试使用一个数值后跟一个字符时它返回“true”,例如:24y。谁能帮我弄清楚我的错误。
函数 validateDecimal(数字,maxDigits) { eval("var stringvar=/^[-+]?([0-9]*\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/"); 返回 stringvar.test(number); }
我写了上面的函数来验证十进制数。变量'maxDigits'用于指定小数部分的位数,'number'作为要验证的值。但是当我尝试使用一个数值后跟一个字符时它返回“true”,例如:24y。谁能帮我弄清楚我的错误。
在不进入正则表达式的情况下,我认为您的代码中的问题是您应该两次转义特殊字符。由于您将其全部放在字符串中,因此字符串解析会转义单个反斜杠。
我认为这应该有效:
eval("var stringvar=/^[-+]?([0-9]*\\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/");
我刚刚尝试过这个,它对我有用:^[+-]?[0-9]*(\.[0-9]{0,5})?$
。
在我的情况下,我做了一个小的修改,你似乎匹配一个十进制数或一个整数。就我而言,我修改了正则表达式以采用带有可选小数部分的整数。
照原样,正则表达式将匹配诸如: 之类的值.222
,23.22222
但不匹配4d.22222
,33.333333
等。
var n1 = "4.33254";
var n2 = "4d.55";
eval("var stringvar=/^[+-]?[0-9]*(\\.[0-9]{0,5})?$/");
alert(stringvar.test(n1));
alert(stringvar.test(n2));
产量:true
和false
分别。
此正则表达式将验证带有 maxDigits of decimals: 的数字
^[-+]?[0-9]*.[0-9]{10}$
。这将验证它到小数点后 10 位。
在 JavaScript 中实现它看起来像:
eval("var stringvar=^[-+]?[0-9]*.[0-9]{" + maxDigits + "}$");
,或者差不多。