仅允许使用jQuery的字母文本框?

我想让一个文本框只允许使用jQuery字母(az)。 任何例子?

 

并且对于喜欢粘贴而不是键入的邪恶用户来说可以是相同的;)

[+]漂亮的jQuery代码:

   

接受的答案

接受的答案可能很短,但它存在严重缺陷( 请参阅此小提琴 ):

  • 无论按下什么键,光标都会移动到最后。
  • 暂时显示非字母,然后消失。
  • Chrome for Android存在问题(请参阅我的评论)。

一个更好的方法

以下内容创建了一个密钥代码数组(白名单)。 如果按下的键不在数组中,则忽略输入( 请参阅此小提琴 ):

 $(".alpha-only").on("keydown", function(event){ // Allow controls such as backspace, tab etc. var arr = [8,9,16,17,20,35,36,37,38,39,40,45,46]; // Allow letters for(var i = 65; i <= 90; i++){ arr.push(i); } // Prevent default if not in array if(jQuery.inArray(event.which, arr) === -1){ event.preventDefault(); } }); 

请注意,这允许使用大写和小写字母。

我已经包含了退格键,删除键和箭头键等密钥代码。 您可以从此密钥代码列表中创建自己的白名单数组,以满足您的需求。

仅在粘贴时修改

当然,用户仍然可以粘贴非字母(例如通过CTRL + V或右键单击),因此我们仍然需要使用.on("input"...监视所有更改.on("input"...仅在必要时 replace()

 $(".alpha-only").on("input", function(){ var regexp = /[^a-zA-Z]/g; if($(this).val().match(regexp)){ $(this).val( $(this).val().replace(regexp,'') ); } }); 

这意味着我们仍然会有光标跳到最后的不良影响,但仅限于用户粘贴非字母时。

避免自动更正

某些触摸屏键盘将尽一切力量在用户认为必要时自动更正用户。 令人惊讶的是,这甚至可能包括autocompleteautocomplete spellcheck甚至spellcheck都关闭的输入。

为了解决这个问题,我建议使用type="url" ,因为URL可以接受大写和小写字母,但不会自动更正。 然后,要绕过浏览器尝试validationURL,您必须在form标记中使用novalidate

要仅允许使用小写字母,如果键代码不在“a”..“z”范围内,请对事件对象调用preventDefault 。 如果允许大写,请检查65..90或’A’..’Z’。

或者,也可以使用众多输入掩码中的一个。

见例子 。

 ​$().keypress(function(e) { if(e.which < 97 /* a */ || e.which > 122 /* z */) { e.preventDefault(); } });​​​​​ 

下面演示只允许使用Jquery的字母[az]:

  $(function() { $('#txtFirstName').keydown(function(e) { if (e.shiftKey || e.ctrlKey || e.altKey) { e.preventDefault(); } else { var key = e.keyCode; if (!((key == 8) || (key == 32) || (key == 46) || (key >= 35 && key <= 40) || (key >= 65 && key <= 90))) { e.preventDefault(); } } }); }); 
   
 // allow only Alphabets AZ az _ and space $('.alphaonly').bind('keyup blur',function(){ var node = $(this); node.val(node.val().replace(/[^A-Za-z_\s]/,'') ); } // (/[^az]/g,'' ); // allow only Number 0 to 9 $('.numberonly').bind('keyup blur',function(){ var node = $(this); node.val(node.val().replace(/[^0-9]/,'') ); } // (/[^az]/g,'' ); 
  $("#test").keypress(function(event){ var inputValue = event.charCode; //alert(inputValue); if(!((inputValue > 64 && inputValue < 91) || (inputValue > 96 && inputValue < 123)||(inputValue==32) || (inputValue==0))){ event.preventDefault(); } }); $("#test1").keypress(function(event){ var inputValue = event.charCode; //alert(inputValue); if(!((inputValue > 47 && inputValue < 58) ||(inputValue==32) || (inputValue==0))){ event.preventDefault(); } }); $("#test3").keypress(function(event){ var inputValue = event.charCode; //alert(inputValue); if(!((inputValue > 64 && inputValue < 91) || (inputValue > 96 && inputValue < 123)||(inputValue==32)||(inputValue > 47 && inputValue < 58) ||(inputValue==32) || (inputValue==0))){ event.preventDefault(); } }); 
  For letters: 

For Numbers:

For Alphanumeric:

感谢第一个答案..做了这个..

   

这有一些改进,如带有重音的字母,并且更改“输入”的“模糊”可以修正暂时显示的非字母,当您使用鼠标选择文本并更正拖动时也是如此。

JQuery函数只允许小写和大写字母:

文本域:

  

JQuery函数:

 $('#a').keydown(function (e) { if (e.ctrlKey || e.altKey) { e.preventDefault(); } else { var key = e.keyCode; if (!((key == 8) || (key == 32) || (key == 46) || (key >= 35 && key <= 40) || (key >= 65 && key <= 90))) { e.preventDefault(); } } }); 

@dev-null-dweller描述的解决方案绝对@dev-null-dweller

但是,从jQuery 3.0.bind()方法已被弃用。 它被.on()方法取代,用于将事件处理程序从jQuery 1.7附加到文档,因此不鼓励使用它。

在这里查看jQuery 3.0的弃用方法列表: http : //api.jquery.com/category/deprecated/deprecated-3.0/

所以解决方案是使用.on()方法而不是.bind()

如果您需要绑定现有元素,那么代码将是:

 $('.alphaonly').on('keyup blur', function(){ var node = $(this); node.val( node.val().replace(/[^az]/g,'') ); }); 

如果需要绑定到动态元素,代码将是:

 $(document).on('keyup blur', '.alphaonly', function(){ var node = $(this); node.val(node.val().replace(/[^az]/g,'') ); }); 

您需要将事件绑定到文档或文档加载中已存在的其他元素。

希望这对新版本的jQuery很有帮助。

支持退格:

 new RegExp("^[a-zA-Z \b]*$"); 

此选项不会检查移动设备。 所以你可以使用jQuery Mask Plugin并使用以下代码:

 jQuery('.alpha-field, input[name=fname]').mask('Z',{translation: {'Z': {pattern: /[a-zA-Z ]/, recursive: true}}});