JavaScript, HTML: Как отключить клавишу Shift (особенно в сочетании с другими клавишами для создания специальных символов)? - PullRequest
0 голосов
/ 05 августа 2020

https://ysuran92.github.io/calculator-project/index

У меня есть проект калькулятора или что-то в этом роде. Сделано в HTML, CSS и JavaScript. Теперь в моем файле JS есть код, предотвращающий отображение символов, таких как буквы, на дисплее калькулятора. Единственное, что я не могу понять, это как "отключить" Shift + (0-9). Вот код:

  // let regEx = /^\s*([-+]?)(\d+)(?:\s*([-+*\/])\s*((?:\s[-+])?\d+)\s*)+$/;

document.addEventListener("keydown", (event) => {
 if (event.keyCode == 13 || event.code == "NumpadEnter") {
     calc.value = eval(calc.value);
 } else if (event.keyCode == 46) {
     calc.value = "";
 } else if (event.keyCode == 8) {
     back();
 } else if (event.keyCode >= 48 && event.keyCode <= 57) {
     calc.value += event.key;
 } else if (event.keyCode >= 96 && event.keyCode <= 105) {
     calc.value += event.key;
 } else if (
     event.keyCode == 107 ||
     event.keyCode == 109 ||
     event.keyCode == 106 ||
     event.keyCode == 111 ||
     event.keyCode == 190 ||
     event.keyCode == 110
  ) {
      calc.value += event.key;
  }
 });

Как вы могли заметить, я уже пробовал RegEx (который не сработал, вероятно, потому, что я ничего об этом не знаю), и я также пробовал событие .preventDefault (). Любые советы или комментарии будут оценены. Заранее спасибо.

1 Ответ

0 голосов
/ 05 августа 2020

Идея рекомендации, данной вам использовать регулярное выражение, состоит в том, чтобы на самом деле протестировать event.key вместо event.keyCode. Вам не нужно проверять нажатую клавишу клавиатуры, а просто проверять, какое значение вы собираетесь добавить в свою строку. Это лучше, потому что это не зависит от клавиатуры пользователя.

Вот наивный способ сделать это:

if (['0', '1', '2', '3', '5', '6', '7', '8', '9'].includes(e.key)) {
  console.log('I am a number');
}

Регулярные выражения более сложны, но позволяют писать это более сжатая форма:

if (e.key.match(/[0-9]/)) {
  console.log('I am a number');
}

Регулярное выражение, которое у вас есть, допускает не только числа. Его можно использовать для проверки правильности данного выражения, например, 1 * 2 / -3. Это regex101 может помочь вам понять это немного больше.

...