3

我想将以下正则表达式扩展到负数。

this.value = this.value.replace(/[^0-9\.]/g, "");

我尝试添加减号做这样的事情, (/[^-0-9.]/g, "") 但这允许在数字的任何地方输入减号。我想在数字的开头只允许出现一次减号。以后出现的减号应该被忽略。

请帮忙。

4

5 回答 5

9

呃,替换每个非数字字符会使这有点困难——就像“否定”正则表达式。我想出的是一个负前瞻[^0-9.],如果它位于字符串的开头(使用起始锚),则可以防止减号 - 将被匹配- 匹配:

….replace(/(?!^-)[^0-9.]/g, "")
于 2012-12-12T17:55:24.297 回答
4

为什么选择正则表达式?怎么样:

var temp = parseFloat(this.value)
this.value = isNaN(temp) ? "" : temp;

这也应该有效:

var temp = +this.value;
this.value = isNaN(temp) ? "" : temp;
于 2012-12-12T17:57:19.050 回答
2

将破折号放在字符类之外:

this.value = this.value.replace(/^-?[^0-9\.]/g, "");
于 2012-12-12T17:47:23.257 回答
0

您提供的正则表达式对于正数本身是错误的,因为它将“100+200=300”转换为“100200300”。

我建议你试试这个: someString.match(/-?[\d]+.?[\d]*/);

于 2012-12-12T18:11:25.067 回答
0

只是把负号放在0前面

this.value = this.value.replace(/[^-0-9\.]/g, "");
于 2021-11-05T15:52:58.600 回答