我正在尝试使用 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/