【问题标题】:JavaScript, HTML: How can I disable the Shift Key (specially when combined with other keys to create special characters)?JavaScript、HTML:如何禁用 Shift 键(特别是与其他键组合以创建特殊字符时)?
【发布时间】:2020-08-04 21:01:24
【问题描述】:

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(它不起作用,可能是因为我对此一无所知)并且我也尝试过 event.preventDefault()。 任何提示或 cmets 将不胜感激。提前致谢。

【问题讨论】:

  • 使用允许列表可能比使用阻止列表更好。移动用户不必按 Shift,我可以随时粘贴特殊字符。

标签: javascript regex calculator shift preventdefault


【解决方案1】:

建议您使用正则表达式背后的想法是实际测试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 可以帮助你更多地理解它。

【讨论】:

    猜你喜欢
    • 2016-12-01
    • 2023-03-19
    • 2022-06-27
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多