繁体   English   中英

只接受输入中的数字和字母

[英]Only accept numbers and letters in input

我只想在输入中接受字母、数字和逗号。

我试过了

document.getElementById('input').onkeydown = function (e) {
  const charCode = (typeof e.which === 'number') ? e.which : e.keyCode;
  return (charCode >= 48 && charCode <= 57) || // numbers
         (charCode >= 65 && charCode <= 90) || // letters
         charCode === 188                      // comma
};

它可以工作,但它也拒绝使用箭头键、输入、删除和退格键(以及可能的其他重要键)。

我可以添加另一个or子句并判断用户是否按下了键箭头、输入、删除或退格,但这是正确的方法吗? 我错过了一些钥匙吗? 平板电脑、台式机和智能手机上的密钥代码是否相同?

编辑

如果我还想确保用户永远不会输入两个连续的逗号怎么办? 所以它不会接受a,b,,c

根据MDN, 则charCode都过时了,他们建议使用keyboardEvent.key

您为这个问题标记了regex很有趣,但是我没有在您的问题中明确看到正则表达式。 但是,下面的示例就足够了。 有关大多数浏览器中本机正则表达式支持的更多信息,请参见String.prototype.match

 document.getElementById('input').onkeydown = function (e) { var value = e.target.value; //only allow az, AZ, digits 0-9 and comma, with only 1 consecutive comma ... if (!e.key.match(/[a-zA-Z0-9,]/) || (e.key == ',' && value[value.length-1] == ',')) { e.preventDefault(); } }; 
 Type Value: <input id="input" type="text" /> 

您也可以使用字符类 -例如\\d\\w ,尽管\\w包含下划线字符( _ ):

 document.getElementById('input').onkeydown = function (e) { var value = e.target.value; //only allow az, AZ, digits 0-9 and comma, with only 1 consecutive comma ... if (e.key.match(/_/) || !e.key.match(/[\\w\\d,]/) || (e.key == ',' && value[value.length-1] == ',')) { e.preventDefault(); } }; 
 Type Value: <input id="input" type="text" /> 

if ((event.keyCode >= 48 && event.keyCode <= 90)) 这对我有帮助,它只允许输入数字和字母

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM