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

标签 javascript regex replace

数字字符是

0 1 2 3 4 5 6 7 8 9 点 逗号 减号在字符串的开头

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

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

这是我目前的情况

"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

This answer几乎解决了我的问题,但未删除字符串中的减号。

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


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

最佳答案

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

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

参见 regex demo

详情

  • ^(-) - 字符串的开始和 - 捕获到第 1 组
  • | - 或者
  • [^0-9.,]+ - 除了数字、.,.
  • 之外的任何 1+ 个字符

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

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

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

参见 this regex demo

这里,增加了一些替代方案:

  • [.,](?=[^.,]*[.,](?!$)) - 匹配 ., code> 后跟另一个 .,., 以外的 0+ 个字符之后
  • [,.]+$ - 匹配任何 1+ 个尾随逗号/点。

关于javascript - 如何在 Javascript 中删除字符串中的所有非数字字符(不包括减号、点和逗号)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58413362/

相关文章:

javascript - 页面退出确认

mysql - 为什么这个 MySql 正则表达式不起作用?

javascript - 用于匹配/替换 JavaScript 注释的正则表达式(多行和内联)

javascript - 返回 Null 之前的正则表达式执行模式

python - 替换 python 字符串/列表中索引列表中的字符

java - 在 Java 中对齐文本

javascript - 删除前导空格并替换多个空格

javascript - 如何从外部 html 页面获取到正在运行的 GWT 页面的回调?

javascript 正则表达式匹配未按预期工作

javascript - 将字节字符串返回给 ExternalInterface.call 会引发错误