正则表达式允许某些非字母数字字符

时间:2017-12-15 11:36:45

标签: jquery regex

我目前有一个事件在输入文本框中触发按键。我目前有一些正则表达式来限制输入到字母数字,这在很大程度上是有效的。但是,我发现正则表达式仍允许使用以下字符%.'

我可以为这些字符的charCodes返回false,但我觉得正则表达式应该在验证字符的工作或者在这种情况下使用正则表达式的重点是什么。

有谁知道我如何纠正这一点,以便这些非字母数字字符无法通过验证?

编辑:添加代码SNIPPET

$('#nationalIdNumber').keypress(function(e) {

  var regex = new RegExp("^[a-zA-Z0-9]+$");
  var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);

  if (regex.test(str) || e.keyCode === 8 || e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 46) {
    return true;
  }

  e.preventDefault();
  return false;
});
<script src="https://code.jquery.com/jquery-3.2.1.js" integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE=" crossorigin="anonymous"></script>

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

1 个答案:

答案 0 :(得分:1)

修改

考虑到不同浏览器中keyCode的问题,您可以尝试更改方法:

$('#nationalIdNumber').on('input',function() {
  $(this).val($(this).val().replace(/[^a-z0-9]/ig,''));
});

这将删除所有不是a-zA-Z0-9的内容,这样您不仅可以处理按下键的文本,还可以处理粘贴和ctrl-v

旧回答

正则表达式没问题,您必须将if:37结果中的e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 46移至%,将{39}个结果移至',将结果移至.或更高,这是shift + something的组合

如果您想保留条件(没有按下移位的代码),请左箭头,右箭头和删除)您必须在e.shiftKey上添加支票regex.test(str) || e.keyCode === 8 || (e.shiftKey === false && (e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 46))