如何添加一个字符到这个验证功能?

问题描述:

$(function(){ 
    $('input[name="username"]').keydown(function(key){ 
     if (jQuery.inArray(key.keyCode, 
      [8,37,39,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90]) 
      == -1 || key.shiftKey){ 
       return false; 
     } 
    }); 
}); 

这样做是对文本字符Ajax验证,它只是让我从a-z0-9,而不是任何其他字符输入字母,但我希望它让我有_(下划线)字符为好。如何添加一个字符到这个验证功能?

+2

“Ajax验证”?这与[Ajax]无关(http://en.wikipedia.org/wiki/Ajax_%28programming%29)。 – 2010-09-07 23:44:32

+0

由于下划线字符需要移位,您的问题比“keydown”事件大。 – 2010-09-08 12:59:46

$('input[name="username"]').keypress(function(event) { 
    var k = event.which; 
    /* 0:  non-input keys 
    8:  backspace 
    48-57: 0-9 
    97-122: a-z 
    95:  _ */ 
    if (k != 0 && k != 8 && k != 95 && 
     (k < 48 || k > 57) && (k < 97 || k > 122)) 
    return false; 
}); 

$('input[name="username"]').keyup(function() { 
    var inp = $(this).val(); 

    if (inp.match(/[^a-z0-9_]/g)) 
    $(this).val(inp.replace(/[^a-z0-9_]/g, '')); 
}); 

keypress事件处理程序试图赶上无效字符前都输入到现场,以防止分心“跳跃”效应时显示无效字符和keyup再次删除。请注意,event.which包含由jQuery规范化的字符代码。

keyup处理是必要赶上了在使用按Ctrl-V(注意,不幸的是使用菜单选项编辑不赶输入>粘贴)输入的字符。在每keyup(由其值改变引起)之后,需要额外的测试来停止输入字段回到其最左边的位置。现在只有在需要删除某些东西时才会重置其位置。

您可以在JSBin上进行测试。

+0

这是最好的答案,因为需要下划线,shift键,标准化和所有爵士乐:) – 2010-09-08 13:19:55

+1

现代浏览器有一个粘贴事件,它会过早触发,但是您可以使用setTimeout,从事件处理函数内部以零延迟方式捕获鼠标粘贴。 – Tgr 2010-09-08 22:08:30

检查这两个键码,Shift键,:

(key.shiftKey && key.keyCode == 109) 

正如其他人更不用说了,如果你需要在客户端严格验证,你需要做的不仅仅是处理​​事件。

+0

189是IE的关键代码; jQuery规范'event.which',它获得了代码109的分配。请参阅[.keydown()](http://api.jquery.com/keydown/)。 – 2010-09-07 23:55:56

将代码27添加到数组中?

+0

27?你从哪里得到那27个? – 2010-09-07 23:53:40

+0

nope it deosnt work – getaway 2010-09-08 00:02:54

一个这样做的稍微更可读的方式是

$('input[name="username"]').keydown(function() { 
    $(this).val($(this).val().replace(/[^a-zA-Z0-9_]/g, '')); 
}); 

还要注意的是验证上的keydown事件不会从副本阻止某人/粘贴用鼠标任意TXT。

+1

that deost work sorry mate – getaway 2010-09-08 00:00:28

+0

谢谢,但它仍然让我输入非法字符,我只想要az 0-9和下划线 – getaway 2010-09-08 00:41:06