【问题标题】:How to remove characters in a field javascript如何删除字段中的字符javascript
【发布时间】:2012-06-19 14:00:52
【问题描述】:

我尝试使用以下代码将文本字段值从(N50,000.00 NGN) 格式化为(50000),但结果不是产生50000,而是产生5000000

有人可以帮忙吗?

<script type="text/javascript" language="javascript">

    function doWork() {
        var amount = document.getElementsByName('amount');
        var str = amount[0].value;
        var temp = '';
        for (i = 0; i < str.length; i++) {
            if (!isNaN(str[i]))
                temp += str[i];
        }
        amount[0].value = temp;
    }
</script>

<input type="text" name="amount" value="N50,000.00 NGN" />
<input type="button" value="submit" onclick="doWork();">

【问题讨论】:

  • 你去掉每个不是数字的字符。这也去掉了“.”,所以左边是 5000000。
  • 您只是在测试 NaN,但小数点后还有更多数字。正则表达式在这里可能更合适,但要这样做,您必须定义您期望的所有输入类型。

标签: javascript decimalformat


【解决方案1】:

获得所需内容的最简单方法可能是在 for 循环中添加另一个条件:

if (str[i] === '.')
    break;

【讨论】:

  • 我不知道小数点右边的数字是否会成为有效数字。在这一点上,您最好将小数保留在最终产品中,而不是停留在它上面。不过,严格来说,从这个问题来看,这似乎是最简单的解决方案。
  • @user1169578,我同意你的观点,这不是最好的解决方案。您还在一段时间内检查每个字符串位置,如果您知道您期望的字符串格式,这也是不必要的。正如您在评论中提到的那样,我认为正则表达式将是一个更好的选择,但鉴于 OP 已经拥有的内容,我认为这是最简单和最快的扩展。如果您要遍历字符串中的所有字符,那么随着需求变得越来越复杂,添加更多逻辑已经很困难了。
【解决方案2】:

让我们看一下您尝试格式化的值。

N50,000.00 NGN 中,所有数字都不是NaN。所以你的结果是 5000000 (50 000 00)。解决方法是停在点符号处,例如

function doWork() {
    var amount = document.getElementsByName('amount');
    var str = amount[0].value;
    var temp = '';
    for (i = 0; i < str.length; i++) {
        if (str[i] === '.') break; // there it is
        if (!isNaN(str[i]))
            temp += str[i];
    }
    amount[0].value = temp;
}

【讨论】:

    【解决方案3】:

    这是使用正则表达式的一种方法。请注意,如果用户在输入字段中有多个小数点,则可能会出现奇怪的行为。

    <script type="text/javascript" language="javascript">
    
        function doWork() {
            var amount = document.getElementsByName('amount');
            amount[0].value = amount[0].value.replace(/[^0-9.]/g, "");
            amount[0].value = amount[0].value.replace(/[.][0-9]*/g, "");
        }
    </script>
    
    <input type="text" name="amount" value="N50,000.00 NGN" />
    <input type="button" value="submit" onclick="doWork();">
    

    第一行删除除数字和小数点以外的所有字符。
    第二个,删除所有小数点和它们右边的任何数字。

    不过,使用 parseInt 和 toFixed 可能会更好:

    <script type="text/javascript" language="javascript">
    
        function doWork() {
            var amount = document.getElementsByName('amount');
            amount[0].value = parseInt(amount[0].value.replace(/[^0-9.]/g, "")).toFixed(0);
        }
    </script>
    
    <input type="text" name="amount" value="N50,000.00 NGN" />
    <input type="button" value="submit" onclick="doWork();">
    

    【讨论】:

      【解决方案4】:

      你跳过了小数点。使用:

      if (!isNaN(str[i]) || str[i]=='.')
      

      【讨论】:

      • 我不认为 OP 想要小数点后的内容(期望 50000)。您可以改为停在十进制字符处。
      猜你喜欢
      • 1970-01-01
      • 2012-06-16
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 2013-08-19
      • 2021-11-06
      相关资源
      最近更新 更多