По проверке на число и 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,
Пользовательский ввод, в формах и prompt, это всегда строка на выходе, зачем проверять на строку, ну prompt может null еще вернуть и всё, различные input.value это строки. |
Цитата:
p.s. Глянул пару js либ по валидации, и там регулярки, видимо неспроста, хотя мой код вроде ок работает, хотя на коленке писал, особо не щупал, но даже '+5' не пропустит, как и jquery-validation |
Часовой пояс GMT +3, время: 01:42. |