Regex-javascript替换所有非数字

Regex-javascript替换所有非数字,javascript,jquery,regex,replace,Javascript,Jquery,Regex,Replace,这个问题我已经被问过好几次了,尽管我尽了最大的努力去复制,并且阅读了regex,但这似乎不起作用: $("#button").click(function () { new_number = $("#the_input").val(); new_number = new_number.replace(/[^0-9]+/g, '') // also doesn't work: (/\D/g, '') $("#result").html(new_nu

这个问题我已经被问过好几次了,尽管我尽了最大的努力去复制,并且阅读了regex,但这似乎不起作用:

$("#button").click(function () {
    new_number = $("#the_input").val();
    new_number = new_number.replace(/[^0-9]+/g, '')
             // also doesn't work: (/\D/g, '')
    $("#result").html(new_number);
});
目标是:单击按钮,从输入中收集值,删除div中的非数字和输出字符串

结果是:当我输入一个数字时,结果很好。当我输入一个非数字&一个数字,或者除数字以外的任何东西时,它会显示为空白。它似乎替换了整个字符串,而不仅仅是匹配的字符


帮助?

如果要允许在输入字段中输入非数值,请将类型从数字改为文本


演示:

使用此代码对其进行过滤:

String.prototype.filter = function(){
    return this.match(/([0-9])/g).join("");
};
例如:

$("#button").click(function(){
    new_number = $("#the_input").val().filter();
    $("#result").html(new_number);
});

这不起作用的原因是您使用的是a type=number输入。要求数字输入中的值为。如果在查询.value时输入了非浮点值,浏览器将返回空字符串。在Firefox中,如果您查询.value,并且它有一个无效值,那么输入的内容将在其周围发出红光,表明它是一个无效值,目前,我测试的其他浏览器没有;他们只是默默地失败了

这意味着,当浏览器计算new_number.replace/[^0-9]+/g时,它实际上是在计算.replace/[^0-9]+/g,结果是一个空字符串

正如前面的回答所建议的,您可以通过将其更改为正常文本输入来修复此行为

或者,您可以通过检查.val是否返回空字符串并在返回空字符串时警告用户来验证字段,而不是尝试使用正则表达式清理输入:

$("#button").click(function () {
    var new_number = $("#the_input").val(); // don't forget to use var or your variable will be an implicit global!
    if (new_number === '') {
        // warn the user here
    } else {
        $("#result").html(new_number);
    }
});

在对此类问题进行故障排除时,检查以确保输入是您所期望的,这样可以为您省去很多麻烦

因为当你输入一个非数值时,输入的类型是数字,它不会返回一个值,所以将类型更改为文本并选中-他想替换非数字。哦。这是一场比赛。加入而不是替换。对不起,真正的问题是通过@Ussible Code和Arun解决的。请解释一下,如果你投了反对票。因此,@QuentinEngles,在用户名前加上一个@。如果你没有说你被否决了:我只是请被否决的人解释一下。嗯。。。我有点好奇为什么在这个问题上投反对票。谢谢巴德,我喜欢这个建议,不过简单地将字体改为文本更适合我的具体情况。以后我会记住你的建议!热爱你的工作,就是这样。我没意识到,瓦尔会认为这是个问题。为了保持通常带有type=number输入的微调器,我使用了jqueryui微调器,得到了相同的结果。干杯
$("#button").click(function () {
    var new_number = $("#the_input").val(); // don't forget to use var or your variable will be an implicit global!
    if (new_number === '') {
        // warn the user here
    } else {
        $("#result").html(new_number);
    }
});