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

时间:2010-06-05 10:52:34

标签: javascript jquery

我想让一个文本框只允许使用jQuery的字母(a-z)。 有什么例子吗?

12 个答案:

答案 0 :(得分:45)

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

对于喜欢粘贴而不是键入的恶意用户,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>

答案 1 :(得分:25)

接受的答案

接受的答案可能很短,但存在严重缺陷(see this fiddle):

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

更好的方法

以下内容创建了一组密钥代码(白名单)。如果按下的键不在数组中,则忽略输入(see this fiddle):

$(".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();
  }
});

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

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

仅在粘贴时修改

当然,用户仍然可以粘贴非字母(例如通过 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,'') );
  }
});

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

避免自动更正

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

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

答案 2 :(得分:6)

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

或者,也可以使用其中一个input mask plugins

请参阅example

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

答案 3 :(得分:3)

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

&#13;
&#13;
  $(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();
        }
      }
    });
  });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<input id="txtFirstName" value="">
&#13;
&#13;
&#13;

答案 4 :(得分:3)

// allow only  Alphabets A-Z a-z _ and space
$('.alphaonly').bind('keyup blur',function(){ 
    var node = $(this);
    node.val(node.val().replace(/[^A-Za-z_\s]/,'') ); }   // (/[^a-z]/g,''
);
// allow only  Number 0 to 9
$('.numberonly').bind('keyup blur',function(){ 
    var node = $(this);
    node.val(node.val().replace(/[^0-9]/,'') ); }   // (/[^a-z]/g,''
);

答案 5 :(得分:1)

&#13;
&#13;
  $("#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();
        }
    });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
For letters:<input type="text" id="test">   <br>
<br>
For Numbers: <input type="text" id="test1">
<br>
<br>
For Alphanumeric: <input type="text" id="test3">
&#13;
&#13;
&#13;

答案 6 :(得分:0)

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

<input name="lorem" class="alpha-only">

<script type="text/javascript">
   $(function() 
   {
        $('.alpha-only').bind('keyup input',function()
        {       
            if (this.value.match(/[^a-zA-Z áéíóúÁÉÍÓÚüÜ]/g)) 
            {
                this.value = this.value.replace(/[^a-zA-Z áéíóúÁÉÍÓÚüÜ]/g, '');
            }
        });
    });
</script>

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

答案 7 :(得分:0)

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

文字字段:

<input id="a" type="text" />

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();
           }
    }
});

答案 8 :(得分:0)

@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(/[^a-z]/g,'') ); 
}); 

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

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

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

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

答案 9 :(得分:0)

支持退格:

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}}});

答案 10 :(得分:0)

$("#txtName").keypress(function (e) {

    var key = e.keyCode;
    if ((key >= 48 && key <= 57) || (key >= 33 && key <= 47) || (key >= 58 && key <= 64) || (key >= 91 && key <= 96) || (key >= 123 && key <= 127)) {
        e.preventDefault();
    }
    var text = $(this).val();
    $(this).val(text.replace("  ", " "));

});  

答案 11 :(得分:0)

if (!isValidName(name)) {           
   //return fail message
} else {
   //return success message
}

function isValidName(name) {
   var regex = new RegExp("^[a-zA-Z ]+$");
   if (regex.test(name)) {
     return true;  
   } else {
     return false; 
   }
}