只允许将两种类型的字符插入输入字段

时间:2017-11-05 00:53:13

标签: javascript php html

我有一个文字字段,我只需要10其他任何内容都会破坏我的逻辑代码。

如何限制在输入字段中输入任何其他字符?

我查看了有关类似主题的帖子,但他们允许0-9之间的数字,依此类推。 我尝试在html中使用pattern属性,但没有模式可以做到这一点,至少我没有找到它。

我找到了这段代码:

$(function(){
              $('#BinaryInputArea').bind('input', function(){
                $(this).val(function(_, v){
                 return v.replace(/\s+/g, '');
                });
              });
            });

限制SPACES被输入,这再次使用了退伍军人似乎只知道的模式。我尝试在.replace部分添加[2-9]但遗憾的是它超出了我的逻辑范围。

编辑:我正在使用TextArea进行输入,因此常规input pattern:[0-1] 无法正常工作

2 个答案:

答案 0 :(得分:3)

您可以使用正则表达式执行此操作:



var txtInput = document.getElementById("txtInput");

txtInput.addEventListener("keydown", function(evt){
  var regEx = /^(0|1)$/;
  
  // Account for two ways to press 0 and 1 on full-size keyboards
  var key1 = String.fromCharCode(evt.keyCode);
  var key2 = String.fromCharCode(evt.keyCode-48); // Adjustment for the keydown event

  // Test key against regular expression
  if(!regEx.test(key1) && !regEx.test(key2)){
    evt.preventDefault();
  }
});

<form>
  <textarea id="txtInput"></textarea>
  <button>Submit</button>
</form>
&#13;
&#13;
&#13;

或者,您可以通过检查按下的特定键来执行此操作:

&#13;
&#13;
var input = document.getElementById("txtInput");

// Do event binding in JavaScript, not in HTML
input.addEventListener("keydown", function(evt){

  // Get the code for the key that was pressed
  var char = evt.keyCode;

  // Is the SHIFT key being held down?
  if(evt.shiftKey){
    // If so, cancel the event
    evt.preventDefault();
  } else {
    // Not the SHIFT key, but if it is 48, 49, 96, 97 
    // (the four ways to get 0 or 1 on a keyboard with a num pad)
    switch (char) {
      case 48:
      case 49:
      case 96:
      case 97:
        break;  // do nothing
      default:
        // Some other key, cancel the event.
        evt.preventDefault();  
        break;
    }
  }
});

// Don't allow pasting into the field
input.addEventListener("paste", function(evt){
  evt.preventDefault();
});
&#13;
<form>
  <textarea id="txtInput"></textarea>
  <button>Submit</button>
</form>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

如果你想使用javascript来做,你可以这样做:

<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 49'>
</input>

编辑:好的,我的第一篇文章只是假装举例说明如何在一条线上完成。但是你需要考虑许多细节,比如允许用户使用键盘键,复制和粘贴事件,删除字符等。你还应该控制用户是否粘贴了无效的值。

所以这是一个更详细的例子:

在一行中:

<input name="number" onkeyup="if (/[^0-1]|^0+(?!$)/g.test(this.value)) this.value = this.value.replace(/[^0-1]|^0+(?!$)/g,'')">

一个jquery示例:

$(document).ready(function() {
  $('input.validateBinary').keyup(function(event) {
    var regEx = /^(0|1)$/;
    if (!regEx.test(this.value)) {
      this.value = this.value.replace(/[^0-1]|^0+(?!$)/g, '');
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" class="validateBinary" />