(Встроенный) способ в JavaScript, чтобы проверить, является ли строка допустимым числом - PullRequest
949 голосов
/ 06 октября 2008

Я надеюсь, что есть что-то в том же концептуальном пространстве, что и старая функция VB6 IsNumeric()?

Ответы [ 30 ]

0 голосов
/ 23 мая 2019

Недопустимо для TypeScript как:

declare function isNaN(number: number): boolean;

Для TypeScript вы можете использовать:

/^\d+$/.test(key)

0 голосов
/ 17 марта 2019

Использование простого JavaScript:

Number.isNaN(Number('1')); // false
Number.isNaN(Number('asdf')); // true

Использование Lodash:

_.isNaN(_.toNumber('1')); // false
_.isNaN(_.toNumber('asdf')); // true
0 голосов
/ 05 марта 2019

Я использую следующее:

const isNumber = s => !isNaN(+s)
0 голосов
/ 31 января 2019

Просто используйте isNaN(), это преобразует строку в число и, если получит действительное число , вернет false ...

isNaN("Alireza"); //return true
isNaN("123"); //return false
0 голосов
/ 09 октября 2018

Недавно я написал статью о том, как убедиться, что переменная является допустимым числом: https://github.com/jehugaleahsa/artifacts/blob/master/2018/typescript_num_hack.md В статье объясняется, как обеспечить с плавающей запятой или целое число, если это важно (+x против ~~x).

В статье предполагается, что переменная string или number для начала и trim доступна / заполнена. Нетрудно расширить его и на другие типы. Вот мясо этого:

// Check for a valid float
if (x == null
    || ("" + x).trim() === ""
    || isNaN(+x)) {
    return false;  // not a float
}

// Check for a valid integer
if (x == null
    || ("" + x).trim() === ""
    || ~~x !== +x) {
    return false;  // not an integer
}
0 голосов
/ 27 ноября 2017

Вот одна строка, чтобы проверить, является ли sNum действительным числовым значением; он был протестирован для широкого спектра входных данных:

!isNaN(+s.replace(/\s|\$/g, ''));  // returns True if numeric value
0 голосов
/ 16 ноября 2017

Вы можете использовать типы, как с flow librar y, чтобы получить статическую проверку времени компиляции. Конечно, не очень полезно для пользовательского ввода.

// @flow

function acceptsNumber(value: number) {
  // ...
}

acceptsNumber(42);       // Works!
acceptsNumber(3.14);     // Works!
acceptsNumber(NaN);      // Works!
acceptsNumber(Infinity); // Works!
acceptsNumber("foo");    // Error!
0 голосов
/ 08 июля 2014

В моем приложении мы разрешаем только символы a-z A-Z и 0-9. Я нашел ответ выше с использованием « string % 1 === 0», если строка не начиналась с 0xnn (например, 0x10), а затем возвращала ее как числовую, когда мы этого не хотели. Следующая простая ловушка в моей числовой проверке, кажется, помогает в наших конкретных случаях.

function isStringNumeric(str_input){   
    //concat a temporary 1 during the modulus to keep a beginning hex switch combination from messing us up   
    //very simple and as long as special characters (non a-z A-Z 0-9) are trapped it is fine   
    return '1'.concat(str_input) % 1 === 0;}

Предупреждение : Это может быть использование давней ошибки в Javascript и Actionscript [Number ("1" + the_string)% 1 === 0)], я не могу об этом говорить, но это это именно то, что нам нужно.

0 голосов
/ 08 августа 2014

Мое решение:

// returns true for positive ints; 
// no scientific notation, hexadecimals or floating point dots

var isPositiveInt = function(str) { 
   var result = true, chr;
   for (var i = 0, n = str.length; i < n; i++) {
       chr = str.charAt(i);
       if ((chr < "0" || chr > "9") && chr != ",") { //not digit or thousands separator
         result = false;
         break;
       };
       if (i == 0 && (chr == "0" || chr == ",")) {  //should not start with 0 or ,
         result = false;
         break;
       };
   };
   return result;
 };

Вы можете добавить дополнительные условия внутри цикла, чтобы соответствовать вашим конкретным потребностям.

0 голосов
/ 13 октября 2014

Я делаю это так:

function isString(value)
{
    return value.length !== undefined;
}
function isNumber(value)
{
    return value.NaN !== undefined;
}

Конечно, isString () будет отключен, если вы передадите какой-то другой объект, для которого определена длина.

...