数字字符是
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');
这里,增加了一些替代方案:
[.,](?=[^.,]*[.,](?!$))
- 匹配.
或,
code> 后跟另一个.
或,
在.
和,
以外的 0+ 个字符之后[,.]+$
- 匹配任何 1+ 个尾随逗号/点。
关于javascript - 如何在 Javascript 中删除字符串中的所有非数字字符(不包括减号、点和逗号)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58413362/