如何在Javascript中删除字符串中的所有非数字字符(不包括减号、点和逗号)?

rob*_*r78 2 javascript regex replace

数字字符是

0 1 2 3 4 5 6 7 8 9 dot comma minus at the start of the string

我需要从字符串中删除所有非数字字符。这里的例子

123 -> 123

123.45 -> 123.45

123,45 -> 123,45

-123 -> -123

-123.45 -> -123.45

-123,45 -> -123,45

--123.45 -> -123.45

--123,45 -> -123,45


a -> empty string

-a -> -

a123 -> 123

-a123 -> -123

a123.45 -> 123.45

-a123.45 -> -123.45

a123.b45 -> 123.45

-a123.b45 -> -123.45

123.-34 -> 123.34

-123.-34 -> -123.34

--123.-34 -> -123.34
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的

"123.45abc".replace(/[^0-9.,]/g,""); -> 123.45

但这失败了

"-123.45abc".replace(/[^0-9.,]/g,""); -> 123.45

这有效

"-123.45abc".replace(/-[^0-9.,]/g,""); -> -123.45

但现在失败了

"-123.45-abc".replace(/-[^0-9.,]/g,""); -> -123.45bc

这个答案几乎解决了我的问题,但字符串内的减号没有被删除。

我正在使用正则表达式在 javascript 中执行此操作。正则表达式不是强制性的。


更新 输入最多有一个逗号或一个点。12.34.56.78永远不会被输入

Wik*_*żew 6

要删除字符串开头的除数字、逗号、点和连字符之外的所有字符,您可以使用

text = text.replace(/^(-)|[^0-9.,]+/g, '$1');
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

细节

  • ^(-)- 字符串的开头和-捕获到组 1 中的a
  • |- 或者
  • [^0-9.,]+- 除数字之外的任何 1+ 个字符,.以及,.

替换为$1,即如果有前导,- 它将保留在结果中。

只保留最后一个非最终逗号/点的更全面的正则表达式是

text = text.replace(/^(-)|[.,](?=[^.,]*[.,](?!$))|[,.]+$|[^0-9.,]+/g, '$1');
Run Code Online (Sandbox Code Playgroud)

请参阅此正则表达式演示

在这里,添加了更多替代方案:

  • [.,](?=[^.,]*[.,](?!$))- 匹配 .or,后面跟着另一个.,0 个以上字符(除了.and之外)之后的某个位置,
  • [,.]+$- 匹配任何 1+ 个尾随逗号/点。