2012-08-10 114 views
0
 
function validateDecimal(number,maxDigits) 
{ 
    eval("var stringvar=/^[-+]?([0-9]*\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/"); 

    return stringvar.test(number); 
} 

我写了上面的函数来验证十进制数。变量'maxDigits'用于指定小数部分的数字位数和'数字'作为要验证的值。但是当我试着用一个数字值后跟一个例如24y的字符时,它返回'true'。任何人都可以帮我弄清楚我的错误。验证十进制数的正则表达式

+1

你并不需要使用'这里eval'时,[正则表达式(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp)构造函数可以将字符串作为参数。 – 2012-08-10 06:15:00

+1

你的主播没有对齐,你想要'^ a $ |^b $'或'^(a | b)$'不要'^ a | b $' - 除非你特别想在数字后面允许任何内容一个小数点,或在没有数字之前。 – tripleee 2012-08-10 06:26:25

回答

3

没有进入正则表达式,我认为你的代码中的问题是你应该两次转义特殊字符。既然你把它全部放入一个字符串中,一个反斜线就会被字符串解析转义。

我认为这应该工作:

eval("var stringvar=/^[-+]?([0-9]*\\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/"); 
+0

好像你在哪里正确。我不完全是一个Javascript人,这是我第一次看到类似的东西。我有点困惑,OP的正则表达式对我来说似乎首先是有效的。我将仅仅作为一种替代解决方案离开我的答案,但是我的+1。 – npinti 2012-08-10 06:18:51

+0

谢谢,它工作正常。但我不明白这个问题。我用'\'来转义字符'。'那么有什么需要逃避'\'本身。 – shin 2012-08-10 06:19:24

+0

好吧,非常感谢。 – shin 2012-08-10 06:22:39

0

我刚刚试过这个,它对我有用:^[+-]?[0-9]*(\.[0-9]{0,5})?$

在我的情况下,我做了一个小修改,你似乎匹配一个十进制数或其他整数。在我的情况下,我修改了正则表达式以获取带有可选小数部分的整数。

由于是,正则表达式匹配像值:分别truefalse.22223.22222但不4d.2222233.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)); 

屈服。

+0

我用这个正则表达式尝试了值2s,但结果是真实的。 – shin 2012-08-10 06:13:30

+0

4d55怎么办?我认为这个问题是非转换的'。'。请参阅下面的答案。 – davidrac 2012-08-10 06:13:46

+0

@shinod:是的,你有一个观点,这已经被* davidrac *解释了。根据* davidrac *的建议,我已经确定了我的答案,现在它应该可以工作。 – npinti 2012-08-10 06:19:48

0

这个正则表达式将验证一个数字与小数点的最大位数: ^[-+]?[0-9]*.[0-9]{10}$。这将验证它到10位小数。

将其实现为JavaScript将如下所示: eval("var stringvar=^[-+]?[0-9]*.[0-9]{" + maxDigits + "}$");或其附近。

+0

目前我无法检查我的JavaScript,但我可以确认该表达式可以使用预计的小数位数。 – 2012-08-10 06:06:32