Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.02.2022, 14:34
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

По проверке на число и isFinite
Приветствую.

В доках в учебнике сказано что:
Цитата:
Иногда isFinite используется для проверки, содержится ли в строке число:
Вы бы стали использовать вот эту глобальную функцию для таких проверок на то что число? Касается данных из форм.

let mynumber = $('#mynumber').val();
    if (!isFinite(mynumber)) {
    	event.preventDefault();
    }


Даже по тому запускаемому примеру видно, что оно вернет истину для

1) пустой строки
2) для строки вида - ' 123 '
3) для чисел в виде - 1e2
4) даже для чисел в 16-ричном формате записи - 0xff

, эти результаты могут выглядеть неожиданно с пользовательской точки зрения.

Смотрю lodash в своей isFinite базируется на статическом Number.isFinite, может этим путем, когда сам преобразовываешь, и стоит идти?

Например что то типа:

function isNumberOk(strVal){
   if (typeof(strVal) == 'string') {
     let numVal = + strVal;
     if ((numVal.toString() == strVal) && (Number.isFinite(numVal))) {
        return true;
     }
     
   }
   return false;
}
let num = prompt("Enter a number", '');

// вернёт true всегда, кроме ситуаций, когда аргумент - Infinity/-Infinity или не число
alert( isNumberOk(num) );


p.s. В yii2 валидация чисел на клиенте сделана регулярками, думал может это устаревший подход

Последний раз редактировалось micscr, 14.02.2022 в 14:38.
Ответить с цитированием
  #2 (permalink)  
Старый 14.02.2022, 15:15
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 457

micscr,
Пользовательский ввод, в формах и prompt, это всегда строка на выходе, зачем проверять на строку, ну prompt может null еще вернуть и всё, различные input.value это строки.

Последний раз редактировалось Rise, 14.02.2022 в 15:19.
Ответить с цитированием
  #3 (permalink)  
Старый 14.02.2022, 15:42
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

Сообщение от Rise Посмотреть сообщение
micscr,
Пользовательский ввод, в формах и prompt, это всегда строка на выходе, зачем проверять на строку, ну prompt может null еще вернуть и всё, различные input.value это строки.
Функция у меня полагается на то, что аргумент - строка (только тогда сравнение == работает корректно), поэтому и проверяю что строка.

p.s. Глянул пару js либ по валидации, и там регулярки, видимо неспроста, хотя мой код вроде ок работает, хотя на коленке писал, особо не щупал, но даже '+5' не пропустит, как и jquery-validation
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертер (перевод) систем счисления helloterry8 Общие вопросы Javascript 5 11.05.2018 22:24
Угадай число. Помогите написать скрипт и по возможности объяснить, как работает Vadim Zhizherin Общие вопросы Javascript 3 04.05.2018 21:09
передать параметры (количество ячеек, минимальное число и максимальное число)? Почему SilentBelka Элементы интерфейса 4 19.10.2017 16:09
игра угадай число. что я сделала не так? 2 раза выбираю число и он выкидывает... olikbel2017 Общие вопросы Javascript 8 07.10.2017 01:41
Как найти наибольшее число и ввести его на экран? Ivan152 Оффтопик 2 20.05.2012 20:13