打字时向数字添加逗号

新手上路,请多包涵

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

编辑:我无法更改 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>

查询

$(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/

原文由 jtd92 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 214
1 个回答

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

第二,有了好的正则表达式,这个其实超级容易,真的不需要反推反推,很无聊。

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

第一行从输入值中删除逗号。

第二行很神奇,它将值从后到前分成 3 组,然后用逗号连接。例如, '1234567' 将变为 ['1', '234', '567']

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

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

小提琴

但是,真正的魔法是,我打赌你会大喊, toLocaleString !什么?!

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

原文由 Leo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题