逗号与 Javascript 中的数字输入混淆

IT技术 javascript string user-input
2021-02-25 05:50:42

我有一个页面,其中包含一些由用户控制的元素。其中之一是文本输入字段,用户应该在其中输入一个数字。如果用户只输入数字(EG 9000),一切都很好,但是用户使用逗号表示法(即 9,000)javascript 不会将输入作为整数。

如何删除逗号和/或强制输入为整数?我尝试使用 parseint(),但它似乎不适用于逗号。

4个回答

使用全局正则表达式将所有逗号替换为空字符串:

var str = "12,345,678";
str = str.replace(/,/g, "");
parseInt(str, 10);
添加 ; 到你的行尾,它实际上是 parseInt(str)。否则,效果很好,谢谢。
2021-04-26 05:50:42
分号实际上是可选的,我正在关注您的 parseint() 示例!不过,我承认你的两个观点,并将进行编辑:-)
2021-05-09 05:50:42
这里唯一需要注意的是十进制符号的局部差异;逗号与句号,developer.mozilla.org/ en-US/docs/Web/JavaScript/Reference/...
2021-05-18 05:50:42

甚至更好

var s="jdjsghd0182.99";
var str = parseFloat(s.replace(/[^0-9 | ^.]/g, ''));
我不同意这根本“更好”。此建议以及@blankabout 的建议正在更改用户的输入,一旦您这样做,您还需要询问用户您对他们输入的解释是否符合他们的实际意图。逗号是可接受的和预期的偏差,而添加其他字符则不是。
2021-04-22 05:50:42
我想我们同意,但上面的正则表达式过于简单;它应该寻找特定的模式,而不仅仅是任何恰好包含可以解释为数字的数字的输入流。例如,“3 组 4”不应被解释为“34”,也不应被解释为“3 - 4”。这是我的观点,但之前可能措辞不好,也可能扩大了原始问题的主题。
2021-04-28 05:50:42
我认为此实现会因负整数而中断,如果您想支持“12,- €”(或某些 POS 系统)的示例,则减号也可能会拖尾。这个例子也说明了 kalisjoshua 的观点——“12,- €”不应该被接受作为输入来解释为德国人写的,因为“12,000 €”会产生 12000 而实际上应该产生 12。扔掉非数字字符对于带连字符的单位,也会触发假阳性减号。我不知道是否有这样的货币,但问题不仅限于货币。“ft-lb”是合法的
2021-04-29 05:50:42
感谢您的反馈,但逗号不仅是可接受的字符,人们倾向于将 $、# 等用于货币,而且人们倾向于添加空格。常见的误解是价格只包含数字和标点符号。(德国人可以写 12,- €)。另一个误解是您通过将数字分组为三元组(千)来区分高价。(一个写¥1 0000)。p当你写代码时,请让所有类型的用户都可以访问
2021-05-02 05:50:42

或者甚至更好,鉴于用户输入的普遍不可靠性,使用它来摆脱所有非数字字符:

var s = "9,Ljk876";
var t = parseInt(s.replace(/[^0-9]/g, ''));
alert ("s:" + s + ", t:" + t);

OP 询问“如何删除逗号和/或强制输入为整数”,所以它没有错。
2021-04-30 05:50:42
PS - 我认为这种方法也会因负整数而中断。
2021-05-07 05:50:42
这应该是答案:)
2021-05-14 05:50:42
拒绝诸如 1,200.34 之类的输入可能会更好。作为用户,如果我认为我转移了 1,200.34 美元,结果却转移了 120,034.00 美元,我会吓坏了。另外,我认为期望是,如果接受浮点值作为输入,则在转换为整数时您会得到底线。您可以通过调整您写的内容来删除第一个点之后的所有内容来做到这一点:parseInt(s.replace(/[^0-9.]/g, '').split('.')[0]);
2021-05-19 05:50:42
这是错误的。如果您使用该正则表达式,它将替换会更改数字的小数 - 例如: parseInt('1,200.34'.replace(/[^0-9]/g, '')); 将返回:120034
2021-05-21 05:50:42

或许

 parseint(ny9000withCommas.replace(/\,/g,""))

让我们谈谈限制:

您可以/应该允许用户同时输入 9000 和 9,000

您可以通过 REGEX 检查有效性。

在服务器端 - 您应该删除逗号并将其视为整数。

replace() 只会替换第一个逗号。如果数字大到可以有多个逗号,这将不起作用。
2021-04-26 05:50:42