JS过滤文本框输入

时间:2011-03-22 18:21:24

标签: javascript jquery

我希望这不是一个愚蠢的问题。我希望谷歌有希望,但我今天失败了。

我有一个文本框<input type="text" id="input1" />,我只想接受输入/^\d+(\.\d{1,2})?$/。我想绑定一些东西到keydown事件并忽略无效键但charCode不够健壮。有没有一个好的jQuery插件可以做到这一点?

我想要达到的效果是让某人输入'hello world! 12.345'并希望忽略除'12 .34'之外的所有字符,并将文本框改为'12 .34'。希望这很清楚。

感谢。

7 个答案:

答案 0 :(得分:0)

我认为你不需要一个插件来做这件事;您可以轻松地附加一个事件并编写一个简单的回调来自己完成这样做:

$('#input1').keyup(function()
{
    // If this.value hits a match with your regex, replace the current 
    // value with a sanitized value
});

答案 1 :(得分:0)

试试这个:

$('#input1').change(function(){
    if($(this).data('prevText') == undefined){
          $(this).data('prevText', ''); 
    }
    if(!isNaN($(this).val())){
        $(this).val($(this).data('prevText'))
    } 
    else {
        //now do your regex to check the number settings
        $(this).data('prevText', $(this).val()); 
    }

})

isNAN函数检查以确保该值为数字

答案 2 :(得分:0)

$('#input1').bind('keyup', function() {
    var val = $(this).val();
    if(!val)
        return;
    var match = val.match(/^\d+(\.\d{1,2})?$/);
    if(!match)
        return;
    //replace the value of the box, or do whatever you want to do with it
    $(this).val(match[0]);
});

答案 3 :(得分:0)

jQuery Keyfilter

用法:

$('#ggg').keyfilter(/[\dA-F]/);

它还支持一些可以指定为css类的预制过滤器。

答案 4 :(得分:0)

$('input1').keyup(function(){
    var val = $(this).val().match(/\d+([.]\d{1,2})?/);
    val = val == null || val.length == 0 ? "" : val[0];
    $(this).val(val);
});

答案 5 :(得分:0)

你应该看看jQuery validation。您可以定义自己的检查方法like this here

答案 6 :(得分:0)

我找到了解决方案。

  1. 缓存keydown事件
  2. 上的最后一个有效输入
  3. 如果检测到无效输入
  4. ,则回滚到keyup事件上的有效输入

    因此:

    var cache = {};
    $(function() {
        $("input[regex]").bind("keydown", function() {
            var regex = new RegExp($(this).attr("regex"));
            if (regex.test($(this).val())) {
                cache[$(this).attr("id")] = $(this).val();
            }
        });
        $("input[regex]").bind("keyup", function() {
            var regex = new RegExp($(this).attr("regex"));
            if (!regex.test($(this).val())) {
                $(this).val(cache[$(this).attr("id")]);
            }
        });
    });