Firefox兼容输入过滤

时间:2017-10-13 20:11:58

标签: javascript jquery html firefox

我正在尝试阻止大多数特殊字符(“_”和“ - ”除外)处理文本输入字段。

我开始通过模式(没有工作)进行正则表达式过滤,然后通过动态js,稍后发现它不能在firefox上运行,我不能使用破折号,下划线,退格键,删除或箭头键,即使它显示我可以在https://regexr.com/

我找到了另一个通过使用ascii表实际上阻止了按键的解决方案,听起来也不错但是现在我仍然不能使用下划线或破折号,虽然我的逻辑似乎很好并且密钥没有记录。

<input id="directory" type="text">

$("#directory").keypress(function(e){
var keyCode = e.which;

/*
48-57 - (0-9)Numbers 65-90 - (A-Z) 97-122 - (a-z) 8 - (backspace)
*/
if (
   !(
     (keyCode == 8 )
     ||(keyCode == 45)
     ||(keyCode == 95)
     ||(keyCode >= 48 && keyCode <= 57)
     ||(keyCode >= 65 && keyCode <= 90)
     ||(keyCode >= 97 && keyCode <= 122)
   )
 ){
 e.preventDefault();
 $("#directory").val('')
 console.log(keyCode);
  toastr.error("Your search string contains illegal characters.  Please use, a-z, A-Z, 0-9, -, or _", "Error", {timeOut: 10000, preventDuplicates:true, positionClass : "toast-top-center"}); 
  }
});

编辑:当然

的反面也不起作用
 if (
   (
     (keyCode >= 0 && keyCode <= 7)
     ||(keyCode >= 9 && keyCode <= 44)
     ||(keyCode >= 46 && keyCode <= 47)
     ||(keyCode >= 58 && keyCode <= 64)
     ||(keyCode >= 91 && keyCode <= 94)
     ||(keyCode == 96)
     ||(keyCode >= 123 && keyCode <= 127)
   )
){

我不知道为什么,但45和95仍然不会让我输入下划线或短划线,任何人都可以帮助我,我想要的解决方案是a-z,A-Z,0-9, - ,_输入?

2 个答案:

答案 0 :(得分:1)

我建议不要依赖keydown,因为当您使用上下文菜单(例如)粘贴内容时,它不会触发。要针对用户应用的任何更改触发事件,请使用input事件。

该事件的缺点是无法取消。但要撤消其中包含无效字符的(部分)更改并不太困难。

以下是它的工作原理:

&#13;
&#13;
$('#directory').on('input', function (e) {
    var i = $(this).val().search(/[^\w-]/);
    if (i < 0) return; // All OK
    $(this).val($(this).val().replace(/[^\w-]/g, ''));
    this.setSelectionRange(i, i);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="directory" type="text">
&#13;
&#13;
&#13;

我的观点是,这种字符阻塞实际上是用户不友好的:人们可能会认为他们的键盘出现故障。允许输入字符可能更好,但是可以直观地指示输入无效,例如带有红色边框和附带的消息。

答案 1 :(得分:0)

这是一个逻辑反转问题......所有的||允许你不想“溜走”的角色。我删除了!()部分,只是在键入允许的键时从事件处理程序返回:

var $output = $("#output")

$("#directory").keypress(function(e) {
  var keyCode = e.charCode;

  /*
  48-57 - (0-9)Numbers 65-90 - (A-Z) 97-122 - (a-z) 8 - (backspace)
  */
 
    if (
      (keyCode == 8) ||
      (keyCode == 45) ||
      (keyCode == 95) ||
      (keyCode >= 48 && keyCode <= 57) ||
      (keyCode >= 65 && keyCode <= 90) ||
      (keyCode >= 97 && keyCode <= 122)
    ) return
    
    e.preventDefault();
    $("#directory").val('')
    console.log(keyCode);
    $output.text("Your search string contains illegal characters.  Please use, a-z, A-Z, 0-9, -, or _");
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input id="directory" type="text">

<pre id="output"></pre>