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

svk*_*svk 19 javascript jquery

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

dev*_*ler 45

<input name="lorem" onkeyup="this.value=this.value.replace(/[^a-z]/g,'');">
Run Code Online (Sandbox Code Playgroud)

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

[+]漂亮的jQuery代码:

<input name="lorem" class="alphaonly">
<script type="text/javascript">
$('.alphaonly').bind('keyup blur',function(){ 
    var node = $(this);
    node.val(node.val().replace(/[^a-z]/g,'') ); }
);
</script>
Run Code Online (Sandbox Code Playgroud)

  • 简单的解决方案,效果很好,谢谢.如果有人想要添加空间,请使用:/ [^ a-zA-Z]/g (5认同)

ryb*_*111 26

接受的答案

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

  • 无论按下什么键,光标都会移动到最后.
  • 暂时显示非字母,然后消失.
  • 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();
  }
});
Run Code Online (Sandbox Code Playgroud)

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

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

仅在粘贴时修改

当然,用户仍然可以粘贴非字母(例如通过CTRL+ V或右键单击),因此我们仍然需要监控所有更改,.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,'') );
  }
});
Run Code Online (Sandbox Code Playgroud)

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

避免自动更正

某些触摸屏键盘将尽其所能在用户认为必要时自动更正用户.令人惊讶地,这甚至可以包括输入,其中autocompleteautocorrect,甚至spellcheck是关闭.

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


Anu*_*rag 6

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

或者,或者使用许多输入掩码插件中的一个.

例子.

?$(<selector>).keypress(function(e) {
    if(e.which < 97 /* a */ || e.which > 122 /* z */) {
        e.preventDefault();
    }
});?????
Run Code Online (Sandbox Code Playgroud)

  • 很好,但仍然需要一些调整,以防止右键单击后粘贴 (5认同)