Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript将html上的输入限制为带小数的数字?_Javascript_Html_Validation - Fatal编程技术网

如何使用javascript将html上的输入限制为带小数的数字?

如何使用javascript将html上的输入限制为带小数的数字?,javascript,html,validation,Javascript,Html,Validation,我检查了这个问题的答案,发现最好的答案是这个,因为它只允许在输入字段中输入数字 function forceNumeric(){ var $input = $(this); $input.val($input.val().replace(/[^\d]+/g,'')); } $('body').on('propertychange input', 'input[type="number"]', forceNumeric); 问题是我需要这样的东西,但它适用于小数的数字。现在这个代

我检查了这个问题的答案,发现最好的答案是这个,因为它只允许在输入字段中输入数字

function forceNumeric(){
    var $input = $(this);
    $input.val($input.val().replace(/[^\d]+/g,''));
}
$('body').on('propertychange input', 'input[type="number"]', forceNumeric);
问题是我需要这样的东西,但它适用于小数的数字。现在这个代码阻止我输入点或逗号,所以我不能输入十进制数字。知道如何适应吗?

  • 调整regexp以接受逗号/点:

    /[^\d\,]+/g

  • 您已经在使用为您进行验证的
    type=number
    。为什么还要关心与本机浏览器实现完全相同的附加验证


我通过将输入字段的类型从数字改为文本,并使用

function forceNumericDecimal(){
    var $input = $(this);
    $input.val($input.val().replace(',', '.'));
    $input.val($input.val().replace(/[^\d\.]+/g,''));
    $input.val($input.val().replace(/\./, "x"));
    $input.val($input.val().replace(/\./g, ""));
    $input.val($input.val().replace(/x/, "."));
}

$('body').on('propertychange input', '.numberdecimal', forceNumericDecimal);

正则表达式替换将更改点的逗号,并且不允许超过一个点。

只需在字符类中添加点/逗号:
/[^\d,]+/g
简单,使用
/[^\d,.]+/g
我想一些研究可能对您有所帮助,并将用于将来的使用。查找正则表达式/regex,您将找到有关如何使用它的文档。简单的回答是,你不能。即使使用正则表达式,如果要将
添加到正则表达式中,也必须验证输入,因为
12.3.45
不是数字。使用格式良好的
数字输入框,像数百万其他程序/站点/脚本一样验证您的输入。此外,这里的答案和评论大多是您发布的流行问题的重复,因此我不确定这个问题对站点有多大用处;它很可能会被标记为与您引用的问题重复。@Claies我成功地做到了。我将添加我的解决方案作为答案。因为如果我单独使用type=number,它允许用户在输入字段中输入文本,然后进行验证,同时我希望它完全阻止文本输入。在这种情况下,您有更多的情况,而不仅仅是替换输入中的“非数字”字符。
1.000.1
不是一个有效的数字,但您的简单regexp将允许它。您知道怎么做吗?不,我不知道,因为这是一项相当复杂的任务。但是一个简单的
Number.isNaN(Number(您的_输入))
应该在大多数情况下都能做到这一点。我试过了,但由于这里所述的原因,它不会很好地工作。请注意,这不是一个“JavaScript”解决方案,它是一个依赖于jQuery事件的解决方案。