3

我发现这个正则表达式用于验证浮点数。但我看不出 2-1 将如何被接受。以下评估为真。我不能使用 parseFloat,因为我需要能够接受“,”而不是“。” 还。我写了re2,但结果相同。

var re1 = new RegExp("^[-+]?[0-9]*\.?[0-9]+$");
console.log(re1.test("2-1"));

var re2 = new RegExp("^([0-9]+)\.([0-9]+)$");
console.log(re2.test("2-1"));
4

3 回答 3

3

有时当你创建一个正则表达式字符串时,你甚至不得不转义反斜杠;这当然可以用反斜杠来完成,所以最终的正则表达式看起来像"\\.*",等等。

这样做,我能够得到正确的结果,如下所示

var re1 = new RegExp("^[-+]?[0-9]*\\.?[0-9]+$");
console.log(re1.test("2-1"));

var re2 = new RegExp("^([0-9]+)\\.([0-9]+)$");
console.log(re2.test("2-1"));

console.log(re1.test("2.1"));
console.log(re2.test("2.1"));​
于 2012-07-10T07:46:56.530 回答
3

如果使用构造函数生成正则表达式,则必须转义反斜杠,即\变为\\

var re1 = new RegExp("^[-+]?[0-9]*\\.?[0-9]+$");

另一种选择是使用不需要转义的文字语法:

var re1 = /^[-+]?[0-9]*\.?[0-9]+$/
于 2012-07-10T07:53:47.390 回答
0

用句点(“.”)替换逗号(“,”)然后使用 parseFloat 怎么样?

于 2012-07-10T07:44:27.153 回答