Javascript HTML文本输入仅允许数字输入

Javascript HTML文本输入仅允许数字输入,javascript,jquery,html,Javascript,Jquery,Html,有没有一种快速方法可以将HTML文本输入()设置为只允许数字击键(加“.”?注意:这是一个更新的答案。下面的注释指的是一个旧版本,它把钥匙码弄得乱七八糟 $(".numeric").keypress(function() { return (/\d/.test(String.fromCharCode(event.which) )) }); JavaScript 自己试试。 $(".numeric").keypress(function() { return (/\d/.test

有没有一种快速方法可以将HTML文本输入(
)设置为只允许数字击键(加“.”?

注意:这是一个更新的答案。下面的注释指的是一个旧版本,它把钥匙码弄得乱七八糟

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
JavaScript 自己试试。

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}
您可以使用以下
setInputFilter
功能过滤文本的输入值(支持复制+粘贴、拖放、键盘快捷键、上下文菜单操作、不可键入的键、插入符号位置、不同的键盘布局和):

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
您现在可以使用
setInputFilter
功能安装输入过滤器:

setInputFilter(document.getElementById("myTextBox"), function(value) {
  return /^\d*\.?\d*$/.test(value); // Allow digits and '.' only, using a RegExp
});
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
有关更多输入过滤器示例,请参见。还要注意,您仍然必须执行服务器端验证

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
打字稿 这是这个的打字脚本版本

function setInputFilter(textbox: Element, inputFilter: (value: string) => boolean): void {
    ["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) {
        textbox.addEventListener(event, function(this: (HTMLInputElement | HTMLTextAreaElement) & {oldValue: string; oldSelectionStart: number | null, oldSelectionEnd: number | null}) {
            if (inputFilter(this.value)) {
                this.oldValue = this.value;
                this.oldSelectionStart = this.selectionStart;
                this.oldSelectionEnd = this.selectionEnd;
            } else if (Object.prototype.hasOwnProperty.call(this, 'oldValue')) {
                this.value = this.oldValue;
                if (this.oldSelectionStart !== null &&
                    this.oldSelectionEnd !== null) {
                    this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
                }
            } else {
                this.value = "";
            }
        });
    });
}
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
jQuery 还有一个jQuery版本。看

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
HTML 5 HTML 5有一个带有
的本机解决方案(请参阅),但请注意,浏览器支持各不相同:

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
  • 大多数浏览器只会在提交表单时验证输入,而不会在键入时验证输入
  • 不支持
    步骤
    min
    max
    属性
  • Chrome(版本71.0.3578.98)仍然允许用户在字段中输入字符
    e
    e
    。另见
  • Firefox(版本64.0)和Edge(EdgeHTML版本17.17134)仍然允许用户在字段中输入任何文本
您自己试试。

2解决方案:

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
使用表单验证程序(例如,使用)

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
在输入字段的onblur(即用户离开字段时)事件期间使用正则表达式执行检查:

<script type="text/javascript">
function testField(field) {
    var regExpr = new RegExp("^\d*\.?\d*$");
    if (!regExpr.test(field.value)) {
      // Case of error
      field.value = "";
    }
}

</script>

<input type="text" ... onblur="testField(this);"/>
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});

函数测试字段(字段){
var regExpr=new RegExp(“^\d*\.?\d*$”;
如果(!regExpr.test(field.value)){
//错误案例
field.value=“”;
}
}
使用此DOM

<input type='text' onkeypress='validate(event)' />
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});

HTML5有
,听起来很适合你。目前,只有Opera在本机支持它,但有一个支持JavaScript实现。

还有一个例子,对我来说非常有用:

function validateNumber(event) {
    var key = window.event ? event.keyCode : event.which;
    if (event.keyCode === 8 || event.keyCode === 46) {
        return true;
    } else if ( key < 48 || key > 57 ) {
        return false;
    } else {
        return true;
    }
};
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
和HTML:

<input type="input" id="edit1" value="0" size="5" maxlength="5" />
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});


如果您想向设备(可能是手机)建议字母或数字,您可以使用

我已经搜索了很长很长时间,想找到一个好的答案,我们迫切需要

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});

这是一个改进的功能:

function validateNumber(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  if ((key < 48 || key > 57) && !(key == 8 || key == 9 || key == 13 || key == 37 || key == 39 || key == 46) ){
    theEvent.returnValue = false;
    if (theEvent.preventDefault) theEvent.preventDefault();
  }
}
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
函数验证枚举器(evt){
var theEvent=evt | | window.event;
var key=theEvent.keyCode | | theEvent.which;
如果((键<48 | |键>57)和&!(键==8 | |键==9 | |键==13 | |键==37 | |键==39 | |键==46)){
theEvent.returnValue=false;
如果(theEvent.preventDefault)theEvent.preventDefault();
}
}

使用jQuery和replace()而不是查看event.keyCode或event.which的简短而甜蜜的实现:

$('input.numeric').live('keyup', function(e) {
  $(this).val($(this).val().replace(/[^0-9]/g, ''));
});
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});

只有一个小的副作用,即键入的字母会立即出现,而CTRL/CMD+A的行为似乎有点奇怪。

HTML5支持正则表达式,因此您可以使用:

<input id="numbersOnly" pattern="[0-9.]+" type="text">
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
$(document).ready(function(){
    $("body").on("focus","input[type=text].number,.NUMBER",function(e){
        $(e.target).data('oldValue',$(e.target).val());
    }); 
    $("body").on("keypress","input[type=text].number,.NUMBER",function(e){
        e.target.oldvalue = e.target.value;
        number(e);
    }); 
    $("body").on("change","input[type=text].number,.NUMBER",function(e){
        var t = e.target
        var min = $(t).attr("min");
        var max = $(t).attr("max");
        var val = parseInt($(t).val());         
        if( val<min || max<val)
            {
                alert("Error!");
                $(t).val($(t).data('oldValue'));
            }
    }); 
});


警告:某些浏览器尚不支持此功能。

更安全的方法是检查输入值,而不是劫持按键并尝试过滤按键代码

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
通过这种方式,用户可以自由使用键盘箭头、修改键、退格、删除、使用非标准键盘、使用鼠标粘贴、使用拖放文本,甚至使用辅助功能输入

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
下面的脚本允许正数和负数

1
10
100.0
100.01
-1
-1.0
-10.00
1.0.0 //not allowed
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
var input=document.getElementById('number');
input.onkeyup=input.onchange=enforceFloat;
//强制执行只能输入浮点值
函数enforceFloat(){
var valid=/^\-?\d+\.\d*$^\-?[\d]*$/;
变量编号=/\-\d+\.\d*\-[\d]*.[\d]+\.[\d]*.[\d]+/;
如果(!valid.test(此.value)){
var n=此.value.match(数字);
this.value=n?n[0]:“”;
}
}

您还可以将输入值(默认情况下被视为字符串)与强制为数字的输入值进行比较,如:

if(event.target.value == event.target.value * 1) {
    // returns true if input value is numeric string
}
$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});

但是,您需要将其绑定到keyup等事件。

只是jQuery使用的另一个变体

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
JavaScript代码:

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
function validate(evt)
{
    if(evt.keyCode!=8)
    {
        var theEvent = evt || window.event;
        var key = theEvent.keyCode || theEvent.which;
        key = String.fromCharCode(key);
        var regex = /[0-9]|\./;
        if (!regex.test(key))
        {
            theEvent.returnValue = false;

            if (theEvent.preventDefault)
                theEvent.preventDefault();
            }
        }
    }
HTML代码:

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
<input type='text' name='price' value='0' onkeypress='validate(event)'/>


因为backspace keycode是8,而regex表达式不允许这样做,所以这是一种绕过bug的简单方法:)

这是的扩展版本。支持
min
max
属性。如果数字超出范围,将显示上一个值

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
用法:

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
功能编号(e){
var theEvent=e | | window.event;
var key=theEvent.keyCode | | theEvent.which;
如果(key!=13&&key!=9){//允许输入并制表符
key=String.fromCharCode(key);
var regex=/[0-9]\./;
如果(!正则表达式测试(键)){
theEvent.returnValue=false;
如果(theEvent.preventDefault)theEvent.preventDefault();
}   
}
}
$(文档).ready(函数(){
$(“输入[type=text]”。过滤器(“.number,.number”)。打开({
“焦点”:功能(e){
$(e.target).data('oldValue',$(e.target.val());
},
“按键”:功能(e){
e、 target.oldvalue=e.target.value;
编号(e);
},
“改变”:功能(e){
var t=e.target;
var min=$(t).attr(“min”);
var max=$(t).attr(“max”);
var val=parseInt($(t).val(),10);
如果(val最佳方法(允许所有类型的数字-实数负、实数正、整数负、整数正)是:

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
JavaScript

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
function validateNumber(evt) {
    var e = evt || window.event;
    var key = e.keyCode || e.which;

    if (!e.shiftKey && !e.altKey && !e.ctrlKey &&
    // numbers   
    key >= 48 && key <= 57 ||
    // Numeric keypad
    key >= 96 && key <= 105 ||
    // Backspace and Tab and Enter
    key == 8 || key == 9 || key == 13 ||
    // Home and End
    key == 35 || key == 36 ||
    // left and right arrows
    key == 37 || key == 39 ||
    // Del and Ins
    key == 46 || key == 45) {
        // input is VALID
    }
    else {
        // input is INVALID
        e.returnValue = false;
        if (e.preventDefault) e.preventDefault();
    }
}
HTML

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});

太简单了

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
//在JavaScript函数中(可以使用HTML或PHP)。

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}
函数isNumberKey(evt){
var charCode=(evt.which)?evt.which:evt.keyCode;
如果(字符码>31&(字符码<48 | |字符码>57))
返回false;
返回true;
}
在表单输入中:

$(".numeric").keypress(function() {
    return (/\d/.test(String.fromCharCode(event.which) ))
});
<input type=text name=form_number size=20 maxlength=12 onkeypress='return isNumberKey(event)'>

输入最大值时(上述值允许f