javascript - str.replace(/[^0-9]/g, "") 删除我的整个字符串,而不是仅仅删除非数字字符。如何使其正常工作?

标签 javascript html string input replace

我正在尝试使用 str.replace 以便在有人使用复制粘贴内容时从数字输入字段中删除任何非数字字符。然而,该函数似乎总是删除所有字符,而不是仅删除非数字字符。

令人惊讶的是,该函数能够检测我的字符串何时是纯数字的,并且在这些情况下不会更改它,但添加一个其他字符将导致整个字符串被丢弃,而不仅仅是删除错误的字符。

我尝试将函数的正则表达式更改为/\D/,但效果并不明显。

这是一个最小的可重现示例,必须在 Firefox 上运行。

<html>
    <head>
        <meta charset="UTF-8">
        <title>Test</title>
    </head>
    <body style="margin:0px;">
        <script src="../lib/jquery-3.3.1.js"></script>
        <input type="number" id="inp"></input>
        <script>
            let input = document.getElementById("inp");
            input.onblur = function()
            {
                $(document).ready(function()
                {
                    input.value = input.value.replace(/[^0-9]/g, "");

                });
            }
        </script>
    </body>
</html>

我期望诸如“34a01 2”之类的输出是“34012”,但实际输出是“”(什么也没有)。我的正则表达式有问题吗?

let input = document.getElementById("inp");
input.onblur = function() {
  $(document).ready(function() {
    input.value = input.value.replace(/[^0-9]/g, "");

  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="number" id="inp"></input>

最佳答案

这看起来是 Firefox 的问题(或错误)。每当数字输入在任何地方包含非数字字符时,该字段的 .value 将为空字符串:

setInterval(() => {
  console.log(input.value);
}, 400);
<input id="input" type="number">

不幸的是,您可能只需删除 type="number" 即可根据需要检索和替换 .value:

let input = document.getElementById("inp");
input.onblur = function() {
  input.value = input.value.replace(/[^0-9]/g, "");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="inp"></input>

要么,要么保留 type="number" 并告诉用户他们尝试粘贴的值无效,并阻止它(因为您无法检索和替换它)。

(另外:当您添加监听器时,仅调用 $(document).ready 一次,如果有的话 - 您当前的代码正在添加一个新的监听器每次视野都模糊)

关于javascript - str.replace(/[^0-9]/g, "") 删除我的整个字符串,而不是仅仅删除非数字字符。如何使其正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57867050/

相关文章:

javascript - 为什么 `isArray()` 写在 `Array` 而不是 `Array prototype` 上?

javascript - 带有 SNS 消息的 Javascript 中的 For 循环

javascript - ASP.NET CompositeScript 路径结果为 404

javascript - 保护 jQuery 函数免受外部访问

javascript - 跨度外层后台控制层级

javascript - amcharts4 格式化来自 unix 时间戳的日期

html - 布局 3 列,无假列

c - 如何在 C 中将 char 数据类型与 if 一起使用?

c++ - 弹性和 Bison : string literal

c# - 在字符串中的每个字符后添加特定字符的优雅方法