【问题标题】:How to remove commas and decimals from value如何从值中删除逗号和小数
【发布时间】:2020-07-09 23:20:27
【问题描述】:

我有一个输入字段,用户可以在其中输入他们的属性值。然后,该值会在 Keyup 上添加逗号和小数。

我正在尝试删除那些逗号和小数。

这是我的 JS。

目前,这会删除“£”符号并删除前 3 位数字之后的所有数字。我将如何更改它以显示最多 6 位数字?

    $('#sd-Calculate').on('click', function () {

        var checkInput = document.getElementById("sd-property-value").value;

        var priceNum = parseInt(checkInput.replace(/£/g, ""));

        console.log(priceNum);

        if (priceNum <= 500000) {
            console.log('less than and equal to 500k');
        } 
});

HTML

<div class="form__field">
    <label for="sd-property-value" class="form__label">Property Value: </label>
    <input type="text" id="sd-property-value" class="sd-property-value currency input-text" name="sd-calc" />
</div>

<div class="calculator-controls">
    <p><button id="sd-Calculate" class="button">Calculate</button></p>
</div>

如何将其更改为最多显示 8 位数字?

例如

£500,000.00 已输入,但希望返回为 500000

【问题讨论】:

  • 您能否添加一些输入示例以及应该从中得出的预期值,包括“困难”案例?
  • 我还建议这是一个 XY 问题 - 而不是输入 50000 并将其转换为 £50,000 然后 转换回 50000 - 您可以存储原始的50000 作为data- 属性$(this).data("value", $(this).val() 之前 弄乱了用户的输入 - 然后只需读回该数据属性

标签: jquery


【解决方案1】:

£500,000.00输入转换为这个500000

对字符串使用slice() 方法和对数组使用filter() 方法来过滤掉输入中任意数量的逗号(,)。

let input = `£500,000.00`;
let arr = input.slice(input.indexOf('£')+1,input.lastIndexOf('.')).split('');

const newArray = arr.filter(item=>item!==',');
let result = parseInt(newArray.join(''));
console.log(result); // 500000

注意:有一个更新,现在我正在使用 filter() 方法。因为,总金额中可能不仅有一个逗号(,)。如果金额变大,金额中的逗号数量将增加。现在filter() 负责所有这些。休息slice() 照顾。这是解决您的问题的更通用的解决方案。

希望这会让你的生活变得井井有条。

【讨论】:

    【解决方案2】:

    你会发现parseInt() 会为你做这件事。请考虑以下内容。

    $('#sd-Calculate').on('click', function() {
    
      var priceNum = parseInt($("#sd-property-value").val());
    
      console.log(priceNum);
    
      if (priceNum <= 500000) {
        console.log('less than or equal to 500k');
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="form__field">
      <label for="sd-property-value" class="form__label">Property Value: </label>
      <input type="text" id="sd-property-value" class="sd-property-value currency input-text" name="sd-calc" />
    </div>
    
    <div class="calculator-controls">
      <p><button id="sd-Calculate" class="button">Calculate</button></p>
    </div>

    如果parseInt 在指定的radix 中遇到不是数字的字符,它会忽略它以及所有后续字符并返回到该点解析的整数值。 parseInt 将数字截断为整数值。允许前导和尾随空格。

    查看更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

    通过您对£500,000.00 的测试,这将失败。结果为NaN。所以我们可以事先用replace检查一下。

    function stripCurrency(str) {
      var regex = new RegExp("$|£|,", "gi");
      str = str.replace(regex, "");
      return str;
    }
    $('#sd-Calculate').on('click', function() {
    
      var priceNum = parseInt(stripCurrency($("#sd-property-value").val()));
    
      if (priceNum <= 500000) {
        console.log('less than or equal to 500k.', priceNum);
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="form__field">
      <label for="sd-property-value" class="form__label">Property Value: </label>
      <input type="text" id="sd-property-value" class="sd-property-value currency input-text" name="sd-calc" value="£499,999.99" />
    </div>
    
    <div class="calculator-controls">
      <p><button id="sd-Calculate" class="button">Calculate</button></p>
    </div>

    您可以使用正则表达式和.replace() 去除整个字符列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2022-07-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多