如何在纯JavaScript中输入表单输入时禁止使用特定字符?

前端之家收集整理的这篇文章主要介绍了如何在纯JavaScript中输入表单输入时禁止使用特定字符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试创建一个用户名文本框,阻止用户的输入,如果它是这些中的任何一个(!,@,#,$,%,^,&,*,(,),=,;,:,`,〜,|,’,?,/,.,>,<,“). 这个想法不是在事后进行检查,而是在点击的那一刻.我有两个想法,这两个结果都很糟糕.第一个JS脚本似乎根本不工作,第二个JS脚本冻结了整个选项卡. 我目前的HTML代码是:

我的第一个JS脚本是:
https://jsfiddle.net/ck7f9t6x

  1. userID_textfield.onkeydown = function(e) {
  2. var prohibited = "!@#$%^&*()+=;:`~\|'?/.><,\"";
  3. var prohibitedchars = prohibited.split("");
  4. var prohibitedcharcodes = new Array();
  5. for (var i = 0; i < prohibitedchars.length + 1; i++) {
  6. prohibitedcharcodes.push(prohibitedchars[i].charCodeAt(i));
  7. for (var a = 0; a < prohibitedcharcodes.length + 1; a++) {
  8. if (prohibitedcharcodes[a] === e.which) {
  9. return false;
  10. }
  11. else {
  12. return true;
  13. }
  14. }
  15. }
  16. }

我的第二个JS脚本是:
https://jsfiddle.net/2tsehcpm/

  1. var username_textfield = document.forms.RegForm.username;
  2. username_textfield.onkeydown = function(e) {
  3. var prohibited = "!@#$%^&*()+=;:`~\|'?/.><,\"";
  4. var prohibitedchars = prohibited.split("");
  5. var text = this.value.toString();
  6. var chars = text.split("");
  7. for (var i = 0; i < chars.length + 1; i++) {
  8. for (var a = 0; a < prohibitedchars.length + 1; a++) {
  9. if (chars[i] == prohibitedchars[a]) {
  10. chars[i] = null;
  11. }
  12. }
  13. }
  14. this.value = chars.join();
  15. }

我的代码出了什么问题,我应该做些什么呢?

任何有启发性的答案将不胜感激!

最佳答案
我已经更新了你最初的小提琴here.

我为简单起见而选择的方法获取按下的键的字符串字符,然后检查它是否在禁止的数组中.

你应该注意到我改为使用onkeypress而不是onkeydown事件,因为第一个包含修饰符,如使用fromCharCode()时的shift键,而另一个不包括(因为keypressed检查完整的键组合).

码:

  1. el.onkeypress = function(e) {
  2. // invalid character list
  3. var prohibited = "!@#$%^&*()+=;:`~\|'?/.><,\"";
  4. // get the actual character string value
  5. var key = String.fromCharCode(e.which);
  6. // check if the key pressed is prohibited
  7. if(prohibited.indexOf(key) >= 0){
  8. console.log('invalid key pressed');
  9. return false;
  10. }
  11. return true;
  12. };

猜你在找的HTML相关文章