javascript限制文本输入字符

时间:2011-04-04 03:39:20

标签: javascript javascript-events whitelist onkeypress

我想将文本框的输入字符限制为[a-z0-9_-]。但是,无论何时此按钮如退格键和箭头键都不起作用。我在本网站和其他网站上发现了一些尝试,但要么它们在所有浏览器上都无法正常工作,要么使用黑名单。例如,W3Schools website example黑名单列出数字。有没有办法使用白名单(上面的那个),仍然允许像退格,箭头,家庭,结束等键?或者我是否必须添加与我想要允许的键匹配的每个键码?我这样做(为简单起见,这是缩短的。)

编辑 - 添加了代码

 <input type="text" onkeypress="return checkInput();">
    function checkInput(){
        return /[a-z0-9_-]/gi.test(String.fromCharCode(window.event.keyCode));
    }

由于

5 个答案:

答案 0 :(得分:1)

只需将示例中的正则表达式更改为:

numcheck = /[^a-z0-9_-]/;

或者更好的是,避免双重否定:

numcheck = /[a-z0-9_-]/;
return numcheck.test(keychar);

然后你可以查找退格键等的密码,并检查它们:

if (keychar === 8) return true;
...

甚至把它们放在你的正则表达式中:

numcheck = /[a-z0-9_\x08-]/;

答案 1 :(得分:1)

您尚未提供任何代码示例,因此很难在响应中具体说明,但作为一般策略,请尝试以下操作:不要尝试将输入的字符列入白名单,请验证每次击键后文本框的内容,以确保它仍包含有效字符。如果没有,请删除输入的最后一个字符。

这种方法允许使用退格键等特殊键,同时实现你真正想要的声音:文本框中的有效值。

答案 2 :(得分:1)

是的,您可以限制字符的输入。例如,创建一个检查正在进行的操作的函数,如果一切正常则返回true,否则返回false:

// return true for 1234567890A-Za-z - _
function InputCheck(e) {
    if ((e.shiftKey && e.keyCode == 45) || e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
        if (e.which == 45 || e.which == 95 || (e.which >= 65 && e.which <= 90) || (e.which >= 97 && e.which <= 122))
            return true;
        return false;
    }
    return true;
}

一旦你有了这个函数,把它挂钩到你的输入(这是用jQuery):

$('#InputID').keypress(InputCheck);

您可以根据需要进行复杂的检查,例如,这将允许美元货币值:

function InputCheck(e) {
    if ((e.shiftKey && e.keyCode == 45) || e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57) && e.which != 46 && e.which != 36) {
        return false;
    }
    // . = 46
    // $ = 36
    var text = $(this).val();

    // Dollar sign first char only
    if (e.which == 36 && text.length != 0) {
        return false;
    }

    // Only one decimal point
    if (e.which == 46 && text.indexOf('.') != -1) {
        return false;
    }

    // Only 2 numbers after decimal
    if (text.indexOf('.') != -1 && (text.length - text.indexOf('.')) > 2) {
        return false;
    }

    return true;
}

答案 3 :(得分:0)

只要您保持不包含任何内容,您就可以按任意键 不在白名单中。

inputelement.onkeyup=function(e){
  e=e || window.event;
  var who=e.target || e.srcElement;
  who.value= who.value.replace(/[^\w-]+/g,'');
}

答案 4 :(得分:0)

将此代码添加到onkeypress事件。

    var code;
    document.all ? code = e.keyCode : code = e.which;
    return ((code > 64 && code < 91) || (code > 96 && code < 123) || code == 8 || code == 32 || (code >= 48 && code <= 57));

对于浏览器兼容性,您可以添加          var k = e.keyCode == 0? e.charCode:e.keyCode;