键入时在数字中添加逗号

Posted

技术标签:

【中文标题】键入时在数字中添加逗号【英文标题】:Adding commas to numbers when typing 【发布时间】:2015-02-03 09:02:29 【问题描述】:

我尝试在用户输入数字时添加逗号。在 Jquery 中选择属性为 number 类型的 input form-control 类的正确语法是什么?

编辑:我无法更改 html 代码,因为它是使用 Bootstrap 从 Django 输出的。

HTML

<span class="input-group-addon">$</span>
<input class="form-control" id="id_step2-number_2"
       name="step2-number_2" type="number">
<span class="input-group-addon">.00</span>

JQuery

$(document).ready(function()
    $("input[type='number']").keyup(function(event)
        // skip for arrow keys
        if(event.which >= 37 && event.which <= 40)
            event.preventDefault();
        
        var $this = $(this);
        var num = $this.val().replace(/,/gi, "")
            .split("").reverse().join("");
          
        var num2 = RemoveRougeChar(
            num.replace(/(.3)/g,"$1,").split("")
                .reverse().join("")
        );
          
        console.log(num2);

        // the following line has been simplified.
        // Revision history contains original.
        $this.val(num2);
    );
);
    
function RemoveRougeChar(convertString)
    if(convertString.substring(0,1) == ",")
        return convertString.substring(1, convertString.length)            
    
    return convertString;

JSFiddle 链接 https://jsfiddle.net/yWTLk/767/

【问题讨论】:

你为什么不用自动数字插件? 看起来很有趣,但我不知道让 JQuery 指向我发布的文本输入的正确语法。 $this.val()this.value 效率高得多。 你可以使用这个小提琴作为基础:jsfiddle.net/GH05T/rd4xsvxd 【参考方案1】:

type="number" 更改为type="text",因为您不能将逗号放入数字中。

<input class="form-control" id="id_step2-number_2"
       name="step2-number_2" type="text">

检查更新Fiddle

【讨论】:

【参考方案2】:

首先,您不能使用input type=number,因为它不允许您使用的字符, 来标注数字组。

第二,有一个好的正则表达式,这其实超级简单,而且真的不需要逆向和逆向,很无聊。

var num = $this.val().replace(/,/gi, "");
var num2 = num.split(/(?=(?:\d3)+$)/).join(",");

第一行从输入值中删除逗号。 第二行很神奇,它将值从最后一个到第一个分成 3 组,然后用逗号连接。例如,'1234567' 将变为 ['1', '234', '567']

我这里使用split只是为了展示RegExp的强大,在实际中我们不需要拆分和加入,直接替换即可:

var num2 = num.replace(/\d(?=(?:\d3)+$)/g, '$&,');

fiddle

但是,真正的魔力在于,我敢打赌你会大喊,toLocaleString!什么?!

(1234567).toLocaleString() // "1,234,567"

【讨论】:

你会怎么处理小数点呢?如果你使用小数点来表示美分,它会破坏它。 @James 继续使用toLocaleString() 我确实先尝试过,但没有成功。也没有错误。我用的是最新版的FF。不过,我会在周一进行更多调查。谢谢。 @James 哎呀,我猜你的语言环境设置与我的不同?由于 JS 的 RE 实现不完整,而且我对 RE 的专业程度不高,我怀疑只用一个 RE 就可以实现。但就个人而言,如果事情变得复杂,我宁愿选择一些“愚蠢”的方法,至少更易于维护:) 但问题是光标总是走到最后。假设我想删除数字,我按 2 次退格键,第一次按后它就结束了 - 非常糟糕。【参考方案3】:

使用输入类型“数字”似乎可以防止使用 javascript 在输入字段中插入逗号。如果您想插入逗号,您可能希望使用“文本”输入,但这会阻止在禁用 Javascript 的浏览器上进行数字验证。

乐趣永无止境,它是 HTML5。

【讨论】:

这应该作为评论而不是答案添加。

以上是关于键入时在数字中添加逗号的主要内容,如果未能解决你的问题,请参考以下文章

将逗号添加到数字值作为UITextField中的用户类型

如何在r中添加或减去逗号分隔的数字?

在数字中添加逗号

需要使用 regexp_replace (Postgresql) 将逗号添加到数字列表中

RegEx 用于匹配除逗号分隔的数字之外的所有字符

用户键入时,columnGridView 中的千位分隔符和逗号