使用 jQuery/JS 键入时使用 1000 个分隔符和 2 个小数位格式化货币输入?

Tec*_*Tee 1 html javascript jquery

我有一个文本输入,我希望它在输入一个允许 2 个小数位和 1000 个分隔符的值时对其进行格式化。它应该只允许数字。我做了以下但它不允许添加小数点。简单来说就是输入产品(货币)的价格。

INPUT = 1234560ABC.5665(应该只允许数字)

EXPECTED = 1,234,560.56(应将小数位限制为 2)

我已经完成了以下操作,但不知道如何添加后跟“.”的十进制值。保护 "," 1000 个分隔符。

<input type="text" id="price" name="price" />

$('#price').keyup(function (event) {
    $(this).val(function (index, value) {
        return '$' + value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    });
});
Run Code Online (Sandbox Code Playgroud)

Abd*_*eed 11

我的解决方案使用连续 .replace

  1. .replace(/(?!\.)\D/g, "") 删除所有非数字字符,除了 .
  2. .replace(/(?<=\..*)\./g, "")删除.除第一个之外的所有额外内容.
  3. .replace(/(?<=\.\d\d).*/g, "") 删除小数点后 2 位后的所有内容
  4. .replace(/\B(?=(\d{3})+(?!\d))/g, ",") 在适当的地方插入逗号

我已经修改了事件以说明对输入字段的所有更改 .on('change click keyup input paste'

片段:

$('#price').on('change click keyup input paste',(function (event) {
    $(this).val(function (index, value) {
        return '$' + value.replace(/(?!\.)\D/g, "").replace(/(?<=\..*)\./g, "").replace(/(?<=\.\d\d).*/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    });
}));
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" id="price" name="price" />
Run Code Online (Sandbox Code Playgroud)