【问题标题】:Format input currency jquery格式输入货币jquery
【发布时间】:2021-08-20 17:46:11
【问题描述】:

我在为货币字段创建掩码时遇到了一些问题。

1- 我需要限制最多 18 个字符(包括 '.' 和 ',') 例如:999.999.999.999,99

2 - 我需要你输入多个 '.' (目前只有一个)

3 - 我希望不要发生这种情况:

因为当我键入时,它会添加“。”就在我再输入一个数字之前。

我的代码:

function onlyNumberAmount(input) {
    var v = input.value;
    v = v + '';
    v = parseInt(v.replace(/[\D]+/g, ''));
    v = v + '';
    v = v.replace(/([0-9]{2})$/g, ",$1");
    v = v.replace(/([0-9]{3}),([0-9]{2}$)/g, ".$1,$2");
    input.value = v;
    if(v == 'NaN') input.value = '';
}
<input type="text" class="form-control" id="mP0"  onkeyup="onlyNumberAmount(this)">

【问题讨论】:

  • 如果在 blur 上格式化值会怎样?
  • @Dani 我需要它作为键盘输入

标签: javascript jquery


【解决方案1】:

以下内容似乎符合您的要求。

function onlyNumberAmount(input) {
  let v = input.value.replace(/\D+/g, '');
  if (v.length > 14) v = v.slice(0, 14);
  input.value =
    v.replace(/(\d)(\d\d)$/, "$1,$2")
     .replace(/(^\d{1,3}|\d{3})(?=(?:\d{3})+(?:,|$))/g, '$1.');
}
<input type="text" class="form-control" id="mP0" onkeyup="onlyNumberAmount(this)">

\d[0-9] 的缩写,我相信你知道。

正向前瞻(?=(?:\d{3})+(?:,|$)) 用于确保. 的正确放置

14 是字符串中可以出现的最大位数。

应要求提供进一步解释。

【讨论】:

  • Thaaaaaaanks :)
【解决方案2】:

如果,测试该字段是否已经有效

const moneyTest = /(\d{1,3}\.)?(\d{1,3}\.)?(\d{1,3})?(.\d{1,2})?/

if (!moneyTest.test(field)) {

然后,如果不是,则分成数字字段

var digits = /d/g.match(field); // might be field.match(/d/g)

现在你要看看原来的数字有没有小数位

var dot = field.lastIndexOf(".");

然后你应该很好地重建数字。

问题:如果有两个点会怎样?

【讨论】:

  • 最多可以增加 3 个点。例如:9.999.999.999,00
  • @SallyNeves 所以在我的正则表达式和 lastindexof 中切换点和逗号。但是,如果您有多个逗号,会发生什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多