Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于验证十进制数的正则表达式 函数validateDecimal(数字,最大位数) { eval(“var stringvar=/^[-+]?([0-9]*\.[0-9]{0,+maxDigits+”})([0-9]+)$/”; 返回stringvar.test(编号); }_Javascript_Regex - Fatal编程技术网

Javascript 用于验证十进制数的正则表达式 函数validateDecimal(数字,最大位数) { eval(“var stringvar=/^[-+]?([0-9]*\.[0-9]{0,+maxDigits+”})([0-9]+)$/”; 返回stringvar.test(编号); }

Javascript 用于验证十进制数的正则表达式 函数validateDecimal(数字,最大位数) { eval(“var stringvar=/^[-+]?([0-9]*\.[0-9]{0,+maxDigits+”})([0-9]+)$/”; 返回stringvar.test(编号); },javascript,regex,Javascript,Regex,我编写了上面的函数来验证十进制数。变量“maxDigits”用于指定小数部分的位数,并将“number”指定为要验证的值。但当我尝试使用一个数字值后跟一个字符(例如:24y)时,它返回“true”。谁能帮我找出我的错误。我刚刚试过这个,它对我有效:^[+-]?[0-9]*(\.[0-9]{0,5})?$ 在我的例子中,我做了一个小小的修改,您似乎匹配的是一个十进制数,或者是一个整数。在我的例子中,我修改了正则表达式,使其采用带可选小数部分的整数 按原样,正则表达式将匹配如下值:.222,23.2

我编写了上面的函数来验证十进制数。变量“maxDigits”用于指定小数部分的位数,并将“number”指定为要验证的值。但当我尝试使用一个数字值后跟一个字符(例如:24y)时,它返回“true”。谁能帮我找出我的错误。

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

在我的例子中,我做了一个小小的修改,您似乎匹配的是一个十进制数,或者是一个整数。在我的例子中,我修改了正则表达式,使其采用带可选小数部分的整数

按原样,正则表达式将匹配如下值:
.222
23.22222
,但不匹配
4d.22222
33.333333

function validateDecimal(number,maxDigits) { eval("var stringvar=/^[-+]?([0-9]*\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/"); return stringvar.test(number); }
生成:
true
false

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

将其实现到JavaScript中,如下所示:
eval(“var stringvar=^[-+]?[0-9]*[0-9]{“+maxDigits+”}$”,等等。

如果不进入正则表达式,我认为代码中的问题是应该对特殊字符转义两次。由于您将所有内容都放在一个字符串中,因此字符串解析将转义一个反斜杠

我认为这应该奏效:

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));

我现在无法检查我的JavaScript,但我可以确认该表达式将使用预期的小数位数。我尝试使用该正则表达式计算值2s,但结果为真。4d55如何?我认为问题在于未被替代的'。请看下面我的答案。@shinod:是的,你确实有一个观点,这已经由davidrac解释过了。我已经修正了我的答案,按照davidrac的建议,它现在应该可以工作了。你不需要在这里使用
eval
,构造函数可以将字符串作为参数。你的锚没有对齐,你需要
^a$^b$
^(a | b)$
不是
^a | b$
-除非您特别希望允许在小数点处的数字之后或没有小数点的数字之前进行任何操作。是的,看起来您是正确的。我并不是一个喜欢Javascript的人,这是我第一次看到这样的东西。我有点困惑,因为OP的正则表达式一开始对我来说是有效的。我会留下我的答案作为替代解决方案,但是+1来自我。谢谢,它工作得很好。但我不明白这个问题。我用“\”来转义字符“.”。那么转义“\”本身的需要是什么呢?传递给eval的字符串文字与其他任何字符串文字一样。这意味着单个反斜杠用于转义字符串中具有特殊含义的字符。当表达式被求值时,剩下的是一个正则表达式,其中还需要一个反斜杠来转义对正则表达式有特殊意义的字符。
eval("var stringvar=/^[-+]?([0-9]*\\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/");