Как предотвратить ввод F5 при вводе html при перезагрузке страницы - PullRequest
1 голос
/ 21 февраля 2020

Я создаю приложение калькулятора, я добавил слушатель событий в документ для прослушивания нажатий цифровых клавиш, например:

    function listenForKeyPress() {
       // add document event listener for all key presses
       document.addEventListener('keyup', (e) => {
          // check to see if the keypress was a number
          if (/[0-9-+-\--.]/g.test(e.key)) {
             // check to see if the input is not already focused
             if (document.activeElement !== input) {
                // focus element
                input.focus();
                // focus value
                input.value += e.key;
             }
          }
      })
    }

    // call function
    listenForKeyPress();

Проблема в том, что я обновляю sh страницу, используя клавишу F5 Мне вводят F5 в элемент ввода, например: enter image description here

Как я могу предотвратить это, спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Я думаю, вы можете изменить свое регулярное выражение следующим образом:

  1. Подберите только один символ, начиная с ^, заканчивая $ и удаляя глобальный / g флаг
  2. [0-9-+-\--.] странно, так как он соответствует - дважды, а также диапазону от «+» до «-» (код символа от 43 до 45). Я думаю, вы хотите, чтобы [\d-+*\/.] соответствовал либо di git (\d), либо одному из операторов +-*/, либо точке.

Что дает:

const regex = /^[\d-+*\/.]$/;

regex.test("F5"); // false
regex.test("a"); // false
regex.test("5"); // true
regex.test("+"); // true
0 голосов
/ 21 февраля 2020

Я обычно использую isNaN(+variable) в качестве проверки числа в строке. Регулярное выражение слишком дорого для такой простой задачи.

['-5', '5', 'F5', ' 5'].forEach(value => {
  const valueAsNumber = +value;
  console.log(`"${value}" is ${isNaN(valueAsNumber) ? 'not' : ''} a number. (${valueAsNumber})`); 
})
...