/1.....9/
— это вообще регулярное выражение, и его точно так же можно хранить в переменной, как какую-нибудь строку.
let value = /1.....9/
console.log(value); // >>> /1.....9/
У вас в условии происходит обычное присваивание.
А совпадение с регулярным выражением выполняют не через оператор сравнения ==
, а через специальный метод /выражение/.test(строка_для_проверки)
. Но корректная регулярка для проверки на число не самая простая:
/^\s*-?\d+(?:\.\d+)?\s*$/.test('12345');
Поскольку числа могут быть и отрицательными, и дробными, а может вначале строки вообще был пробел (умудряются пихать пробелы перед/после точки, после знака минуса, ставить знак плюса перед числом, вводить запятую вместо точки - это всё здесь не учтено).
Но в простейших случаях, число/не число проверяют через встроенный метод isNaN
Он пробует превратить переданный аргумент в число и возвращает true, если не получилось. У него одна проблема, null, пустую строку и пробельную строку превращает в 0 и считает числом. Поэтому дополнительно надо гарантировать, что не прилетел пробел или пустая строка.
const num = document.getElementById('one')
const res = document.getElementById('two')
const btn= document.querySelector('button')
function go() {
let val = num.value.trim(); // удаляет пробелы вначале и в конце строки.
let is_number = val && !isNaN(val);
// Сначала проверка на val -> Пустая строка считается false.
if (!is_number) {
alert('вы ввели не число');
return;
}
/***/
val = Number(val);
res.value = val * val;
}
<input placeholder="введите число" id="one">
<input placeholder="здесь появится результат " disabled="true" id="two">
<button>нажми на меня </button>
Поскольку блоки кода не всегда однострочные, бывает удобно сначала провести валидацию, через return
выйти из функии, если что-то было не так, а затем писать весь свой код, исходя из того, что все данные верны.
Обращаю внимание, в num.value
(val) изначально хранится строка, а не число. На всякий случай, перед работой с числом, не плохо бы в самом верху его явно превратить непосредственно в число.
Т.к. '2' * '2' = 4
, но '2' + '2' = '22'
P.s. isNaN так же посчитает числом пустой массив, или массив, состоящий из одного элемента, который может стать числом, isNaN(['123']) // false
, но в этой задаче массивов нет.
Оффтоп: Разберу приведенную выше реглярку.
/^\s*-?\d+(?:\.\d+)?\s*$/
^
— начало строки, $
- конец строки. Требую, чтобы переданное выражение совпадало со всей строкой от начала до конца, т.к. фыв12
не должно быть true, если в нем просто встречались цифры.
\s
(space) — любой пробельный символ. *
— ноль штук или много раз подряд.
\d
(digit) — любая цифра. +
— от 1 до много раз подряд.
?
— 0 или 1 раз (т.е. не обязательно)
(?:)
— если комбинация ?:
указана вначале скобок, скобки будут работать не как «группа захвата» (capture group). В этом случае это не имеет значения, просто привычка.
.
— означает любой символ кроме переноса строки. Поэтому если хочется совпадения конкретно с точкой, символ нужно дополнительно экранировать \.