2

我正在尝试找到一种方法来验证按键上的文本输入,我只想在我的文本输入中允许数字,包括小数。

我正在采用使用 jQuery.keydown 的方法,并检查密钥是什么,如果密钥不在允许列表中,则使用 event.preventDefault()。但从那以后,我读到密钥在整个浏览器中并不一致,而且我也担心不同的操作系统。

我遇到过这个问题,但我不精通正则表达式,不确定这是否适合我的需求: jquery - validate characters on keypress?

使用这种方法,当键入 00. 时,期望 00.00 的正则表达式会阻止用户,因为在键入时会检查正则表达式。

谢谢

4

4 回答 4

10

如果您想限制输入(而不是验证),您可以使用关键事件。像这样的东西:

<input type="text" class="numbersOnly" value="" />

和:

jQuery('.numbersOnly').keyup(function () { 
    this.value = this.value.replace(/[^0-9\.]/g,'');
});

或者,我们可以在用户“离开”字段后更新它,使用 on change 事件,这样用户仍然可以使用箭头键浏览文本。

jQuery('.numbersOnly').on('change', function () { 
    this.value = this.value.replace(/[^0-9\.]/g,'');
});

这会立即让用户知道他们不能输入字母字符等,而不是稍后在验证阶段。

您仍然需要验证,因为输入可能通过使用鼠标剪切和粘贴来填充,或者可能通过可能不会触发关键事件的表单自动完成器来填充。

小提琴:http: //jsfiddle.net/shannonhochkins/eu7P9/

于 2012-09-30T08:25:05.910 回答
3

您不应该依赖关键事件,因为这意味着如果用户右键单击 -> 粘贴无效字符,验证将失败。

相反,您应该使用 zurbtextchanged事件之类的东西 - 无论输入模式如何(键、粘贴、拖放等),它都会准确触发

http://www.zurb.com/playground/jquery-text-change-custom-event

在您的textchanged处理程序中,您可以输入适当的正则表达式来处理小数。

于 2012-09-30T08:25:16.290 回答
3

我用 e.which 来验证十进制数

$(document).ready(function () { 
    var isEnable=true;
$(".only-number-period").live('keydown', function (e) {
    //isEnable = (e.which != 110) ? false : true;
        if( ((e.which == 9) || (e.which == 46) || (e.which == 8) || (e.which == 110) || (e.which >= 48 && e.which <= 57) || (e.which >= 96 && e.which <= 105))){
            if(isEnable ==false && e.which ==110){return false;}
        }else{
        return false
        }  
    if (isEnable == true) {            
    isEnable=(e.which ==110)?false:true;
        }
    });
});​

链接::http://jsfiddle.net/rTr2w/

于 2012-11-11T11:02:29.743 回答
2

使用Shannon的回答,我提供了以下简单的 JS 代码:

jQuery('.numbersOnly').keyup(function () {
    if(($(this).val().split(".")[0]).indexOf("00")>-1){
        $(this).val($(this).val().replace("00","0"));
    } else {
        $(this).val($(this).val().replace(/[^0-9\.]/g,''));
    }
});

看看这个:http: //jsfiddle.net/SnakeEyes/eu7P9/2/

更新 为避免多个.符号,请使用以下代码:

jQuery('.numbersOnly').keyup(function (e) {
    if(($(this).val().split(".")[0]).indexOf("00")>-1){
        $(this).val($(this).val().replace("00","0"));
    } else {
        $(this).val($(this).val().replace(/[^0-9\.]/g,''));
    }

    if($(this).val().split(".")[2] != null || ($(this).val().split(".")[2]).length ){
        $(this).val($(this).val().substring(0, $(this).val().lastIndexOf(".")));
    }   
});

示例:http: //jsfiddle.net/SnakeEyes/eu7P9/3/

于 2012-09-30T08:31:42.643 回答