javascript按键function:不区分大小写的az,数字和一些特殊的字符?

$('.s').keyup(function(e) { if (!/[A-Za-z0-9]/.test(String.fromCharCode(e.which))) { return false; } 

我想知道什么是我的应用程序的最佳正则表达式解决方案。 我有一个基于ajax的搜索,它应该只在按下实际字符时触发搜索,如aZ(大写和小写),数字,也可能是问号,短划线(连字符)和感叹号。 还应启用空格键。

否则,如果按下shift,option或control-key,也会触发ajax搜索。

这里最简单的正则表达式模式是什么? 谢谢您的帮助

正则表达式的基本forms似乎很好,只包括你想要包含的内容,并注意重音字符。 或者,您可以排除 不需要的字符。

但是我会使用keypress事件而不是keyup事件。 当键入一个实际的可键入字符时, keypress会触发,并且在键重复时触发(而即使一个键重复,你只能获得一个键控)。 对于Shift,Meta,Ctrl等,不会触发keypress 更新 :这不一定是真正的跨浏览器(叹气) ,请参阅下面的更新。

如果你正在挂钩keypress ,我可能不会过滤任何东西(不需要正则表达式),因为我宁愿推迟浏览器及其对语言环境的认识,因为它构成了一个真正的角色。 我也可能包括一个短暂的延迟,以避免大量不必要的搜索。 如果这个人相当快速地键入“fred”,则不需要搜索“f”,“fr”和“fre”。

这是我的意思的一个例子(将keypress与轻微延迟相结合)。 如果你真的想要过滤掉某些字符,你可以在事件处理程序中执行此操作,但由于上述原因,我没有在下面:

HTML:

  

JavaScript(使用jQuery,因为您使用jquery标记了您的问题):

 jQuery(function($) { var searchTimer = 0; $('#theText').keypress(function() { if (searchTimer != 0) { clearTimeout(searchTimer); } searchTimer = setTimeout(doSearch, 250); }); function doSearch() { searchTimer = 0; display("Search: '" + $('#theText').val() + "'"); } function display(msg) { $('

').html(msg).appendTo(document.body); } });​

实时复制

该示例在它看到的最后一个keypress后搜索四分之一秒; 根据需要将参数调整为setTimeout


更新 :在你下面关于箭头键的评论后,我想“但是你没有看到按键上的箭头键,对吗?” 答案是:你在Opera和其他几个人身上做过。 感叹是的,有了一个filter:

 $('#theText').keypress(function(event) { // Magic numbers from http://unixpapa.com/js/key.html switch (event.keyCode) { case 37: // Left case 38: // Up case 39: // Right case 40: // Down break; default: // A "real" key, include it if (searchTimer != 0) { clearTimeout(searchTimer); } searchTimer = setTimeout(doSearch, 250); } }); function doSearch() { searchTimer = 0; display("Search: '" + $('#theText').val() + "'"); } 

实时拷贝 (这个只是过滤掉箭头键;你会想要扩展它)

如果你还不知道它,那么这个页面非常适合关于跨浏览器的键盘事件的疯狂信息。 它可能有点过时了。