function validateDecimal(number,maxDigits) { eval("var stringvar=/^[-+]?([0-9]*\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/"); return stringvar.test(number); }
我写了上面的函数来验证十进制数。变量'maxDigits'用于指定小数部分中的位数和'number'作为要验证的值。但是当我尝试使用数字值后跟一个字符例如:24y时,它返回'true'。任何人都可以帮我弄清楚我的错误。
答案 0 :(得分:3)
不进入正则表达式,我认为你的代码中的问题是你应该两次逃避特殊字符。由于您将所有内容都放在字符串中,因此字符串解析会转义单个反斜杠。
我认为这应该有效:
eval("var stringvar=/^[-+]?([0-9]*\\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/");
答案 1 :(得分:0)
我刚试过这个,它对我有用:^[+-]?[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
。
答案 2 :(得分:0)
此正则表达式将使用maxDigits小数验证数字:
^[-+]?[0-9]*.[0-9]{10}$
。这将验证它到10位小数。
将其实现为JavaScript将如下所示:
eval("var stringvar=^[-+]?[0-9]*.[0-9]{" + maxDigits + "}$");
,或其左右。