Способы валидации чисел в JavaScript
Проверка переменной на целое число или с плавающей точкой в javascript может осуществляться разными способами. Рассмотрим их преимущества и недостатки, а в конце сделаем ещё проверку на чётность и нечётность.
Валидация целых чисел
Рассмотрим 4 способа валидации переменной «value» на простое число. Все представленные выражения возвращают булевый тип — «true» или «false».
Метод «isInteger».
Number.isInteger(value)
Недостаток — возвращает положительный результат для значений с нулём в начале, например: 05, 0007, 011. В некоторых случаях это может быть критично.
Для отсеивания отрицательных чисел добавьте дополнительное условие:
Number.isInteger(value) && value >= 0
Функция «isNaN» работает противоположно предыдущему методу, поэтому вызываем её со знаком отрицания. Недостатки те же.
!isNaN(value)
-
Один из самых популярных способов — валидация регулярным выражением:
/^(0|[1-9]\d*)$/.test(value)
Из недостатков отмечу плохую читаемость в коде. Зато не пропускаются значения с нулём в начале и выражение может быть подстроено под любые нужды. Например, этот пример не пропускает отрицательные числа и не ограничен количеством цифр, но это легко поправить.
/^(0|-?[1-9]\d{0,5})$/.test(value)
А это оригинальный подход с использованием операции побитового исключающего ИЛИ:
(value ^ 0) == value && value != ''
Дополнительная проверка на пустоту обязательна, потому что ('' ^ 0) == '' вернёт «true».
Закончим функцией преобразования переменной в десятичную систему исчисления. Если в качестве параметра будет не число, то функция вернёт «NaN», а сравнение — «false».
String(parseInt(value, 10)) === String(value)
Числа с плавающей точкой
Для проверки переменной на число с точкой (запятой) в JS наиболее распространены три способа.
Применение функции «parseFloat».
String(parseFloat(value, 10)) === String(value)
-
Регулярное выражение, позволяющее указать, сколько допускается знаков после точки. Истинное значение вернется если будет не более 2х.
/^(0|[1-9]\d*)(\.[0-9]{1,2})?$/.test(value)
Разрешаем 4 знака после точки и отрицательные числа:
/^-?(0|[1-9]\d*)(\.[0-9]{1,4})?$/.test(value)
Применение функции «isNaN» в комплексе с нахождением точки.
!isNaN(value) && String(value).includes('.')
Проверка на чётность
Для проверки на чётность в JS используют оператор остатка от деления.
value % 2 == 0
Сравнение вернёт истину, если «value» чётное число и ложь — если нечётное.