在Javascript中使用逗号分隔数字

27

我有一个 JavaScript 函数,它接受一个数字并对该数字执行数学运算。但是,我传入的数字可能包含逗号,在我有限的 JavaScript 经验中,我在处理该值时遇到了问题。它似乎不将其视为数值类型。

最简单的方法是如何将一个值为 1,000 的参数转换为数值型的 1000?


11
有些人会四处攻击他们不理解的问题,我不知道为什么,他们就是这么做。 - TStamper
这似乎与一切背道而驰。我希望它能显示谁给了负评的日志,但我想那只会滋生怨恨。 - Mike Cole
4个回答

35

您可以为文本框设置一个 onblur() 函数,当用户试图离开文本框时,使用 JavaScript 的 replace 函数从值中移除逗号。

示例:

  function checkNumeric(objName)
  {
    var lstLetters = objName;

    var lstReplace = lstLetters.replace(/\,/g,'');
  }  
这里有一个输入标签:
<input type="text" onblur="checkNumeric(this);" name="nocomma" size="10" maxlength="10"/>

我宁愿在服务器端处理这个问题,因为这样可以向用户展示你已经操作了他们的值。 - Jake

24

一种快速而简单的方法是使用String.replace()方法:

var rawstring = '1,200,000';
var cleanstring = rawstring.replace(/[^\d\.\-\ ]/g, '');

这将把cleanstring设置为:1200000。 假设您使用的是美国格式,则将进行以下转换:

1234 --> 1234
1,234 --> 1234
-1234 --> -1234
-1,234 --> -1234
1234.5 --> 1234.5
1,234.5 --> 1234.5
-1,234.5 --> -1234.5
1xxx234 --> 1234

如果你在其他反转 '.' 和 ',' 的地区,那么你需要在正则表达式中进行更改。


3

更新的回答:

逗号分隔的数字是语言特定的,不是所有语言都使用这种系统。

Stackoverflow 上有许多错误/不完整的答案,这些答案是针对特定地区的,或者建议使用来自 NPM 的第三方脚本,我认为这是过度杀伤力。

以下是一些不好的答案列表:

  1. 如何根据语言环境将字符串转换为数字(与.toLocaleString相反)?
  2. 是否有任何 JavaScript 标准 API 可以根据语言环境解析为数字?

有一个特别的好答案涵盖了多个语言环境:

https://dev59.com/72gu5IYBdhLWcg3wASSO#45309230

先前的回答:

将逗号分隔的数字字符串转换为数字类型(也称为类型转换

+"1,234".split(',').join('') // outputs 1234

分解:

+             - math operation which casts the type of the outcome into type Number
"1,234"       - Our string, which represents a comma delimited number
.split(',')   - split the string into an Array: ["1", "234"], between every "," character
.join('')     - joins the Array back, without any delimiter: "1234"

一个简单的函数如下:

function stringToNumber(s){
  return +s.split(',').join('');
}

2
您的回答很好,我非常感谢您在“分解”部分所付出的额外努力。我希望更多的人能够在这里这样做。谢谢! - Brian Powell

2

我早先找到了那篇文章,但我不清楚 FormValue 项来自哪里。 - Mike Cole
1
使用空字符串("a blank"可能被解释为"a space") - Anonymous
链接中提到的表单编号应该是起始编号。 - James Black

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接