Строка есть число javascript

(Встроенный) способ в JavaScript, чтобы проверить, является ли строка допустимым числом

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

Если вы переходите к этому вопросу, попробуйте пропустить все ответы RegEx. Это просто НЕ способ сделать это.

Если только кто-то не хочет делать это: проверить, имеет ли данная строка формат действительного потока цифр. Почему это должно быть неправильно тогда?

Выбранный ответ неверен . См. Его комментарии, но в основном это происходит с isNaN(«») например, isNaN(«») , isNaN(» «) , isNaN(false) и т. Д. Он возвращает false для них, подразумевая, что они являются числами.

29 ответов

Чтобы проверить, является ли переменная (включая строку) числом, проверьте, не является ли она числом:

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

isNaN(num) // returns true if the variable does NOT contain a valid number 

Примеры

isNaN(123) // false isNaN('123') // false isNaN('1e10000') // false (This translates to Infinity, which is a number) isNaN('foo') // true isNaN('10px') // true 

Конечно, вы можете отрицать это, если вам нужно. Например, чтобы реализовать пример IsNumeric вы дали:

Читайте также:  Заголовок страницы

Чтобы преобразовать строку, содержащую число, в число:

работает только в том случае, если строка содержит только числовые символы, иначе она возвращает NaN .

+num // returns the numeric value of the string, or NaN // if the string isn't purely numeric characters 

Примеры

+'12' // 12 +'12.' // 12 +'12..' // Nan +'.12' // 0.12 +'..12' // Nan +'foo' // NaN +'12px' // NaN 

Свободно преобразовать строку в число

полезно для преобразования 12px в 12, например:

parseInt(num) // extracts a numeric value from the // start of the string, or NaN. 

Примеры

parseInt('12') // 12 parseInt('aaa') // NaN parseInt('12px') // 12 parseInt('foo2') // NaN These last two may be different parseInt('12a5') // 12 from what you expected to see. 

Поплавки

Имейте в виду, что, в отличие от +num , parseInt (как следует из названия) преобразует число с плавающей точкой в целое число, отсекая все после десятичной точки (если вы хотите использовать parseInt() из-за этого поведения, вы, вероятно, лучше использовать другой метод):

+'12.345' // 12.345 parseInt(12.345) // 12 parseInt('12.345') // 12 

Пустые строки

Пустые строки могут быть немного нелогичными. +num преобразует пустые строки в ноль, а isNaN() предполагает то же самое:

Очень важное замечание о parseInt заключается в том, что он позволит вам указать основание для преобразования строки в int. Это большой вопрос, так как он пытается угадать для вас основание, если вы его не поставите. Так, например: parseInt («17») дает 17 (десятичное, 10), а parseInt («08») — 0 (восьмеричное, 8). Поэтому, если вы не намерены иначе, безопаснее всего использовать parseInt (число, 10), явно указав 10 как основание.

Downvote, потому что isNaN также возвращает false с charcode 9, возможно, происходит с другими «странными» кодами.

Это просто неправильно — как он получил так много голосов? Вы не можете использовать isNaN «Чтобы проверить, не является ли переменная числом». «не число» — это не то же самое, что «IEEE-794 NaN», что и isNaN . В частности, такое использование не выполняется, по крайней мере, при тестировании логических значений и пустых строк. См. Developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .

Обратите внимание, что isNaN (true) и isNaN (false) всегда возвращают false! Таким образом, логические значения также являются числами для этой функции)

Самый быстрый способ проверить, является ли число числом, это проверка «равно себе»: var n = ‘a’; if (+n === +n) < // is number >Это на ~ 3994% быстрее, чем isNaN в последней версии Chrome. Смотрите тест производительности здесь: jsperf.com/isnan-vs-typeof/5

Собственно, при проверке: parseInt(») === NaN — не получается. Хотя, печатая его в окне консоли: parseInt(»); // prints NaN . странный

@ Арман-Биматов, это потому что NaN! == NaN. Чтобы проверить, не является ли результат parseInt (x) не числом, вы должны проверить isNaN (parseInt (x))

@dcsan false и true можно интерпретировать как 0 и 1. false + true + true + false + true; равно 3 (например, 0 + 1 + 1 + 0 + 1). Так да. Смотрите комментарий @corvec, вы должны использовать !isNaN(parseInt(false)) вместо этого он вернет false

@Dan Возможно, к этому isFinite следует добавить функцию isFinite . developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/.

« Только содержит числовые символы» немного преувеличивает. Предлагаем добавить список исключений: +’0xdeadbeef’ === 3735928559 и +’6e4′ == 60000

** Предупреждение ** Этот ответ неверный. Используйте на свой риск. Пример: isNaN(1 + false + parseInt(«1.do you trust your users?»))

Если вы используете isNaN — помните о следующих опасных аргументах, для которых isNaN вернет false: isNaN([]), isNaN([234]), isNaN(null), isNaN(true), isNaN(false), isNaN(»), isNaN(‘ ‘) . Последний является строкой из одного или нескольких пробелов.

Также имейте в виду, что есть случай, когда isNaN может закончиться исключением. Это происходит, если вы пытаетесь применить его к Symbol: var mySymbol = Symbol(‘Hey’) а затем isNaN(mySymbol) будет isNaN(mySymbol) Cannot convert a Symbol value to a number вместо возврата true.

@ Можете ли вы обновить свой ответ, чтобы устранить риски использования проверок isNaN с пустыми пробелами, ложными значениями и т. Д.? Очевидно, этот пост вызывает много ошибок.

И вы могли бы пойти RegExp-путь:

var num = "987238"; if(num.match(/^-\d+$/))< //valid integer (positive or negative) >else if(num.match(/^\d+\.\d+$/))< //valid float >else < //not valid number >

Это не работает с шестнадцатеричными числами (например, 0x12), с плавающей запятой без начального нуля (например, .42) и отрицательных чисел.

@JoelCoehoorn Хотите уточнить, почему RegExp == здесь плохо? Кажется, является действительным вариантом использования для меня.

Существует больше способов, чем кажется, чтобы построить число (шестнадцатеричные числа в другом комментарии — только один пример), и есть много чисел, которые могут не считаться действительными (переполнение типа, слишком точное и т. Д.). Кроме того, регулярное выражение медленнее и сложнее, чем просто использование встроенных механизмов

Обратите внимание, что запуск myRegExp.test (num) немного более эффективен, чем подход с совпадением. См. Jsperf.com/regexp-test-search-vs-indexof/12

Голосование против: вместо использования Regex рассмотрите возможность использования $.isNumeric JQuery. Существует так много возможностей представления чисел, что вам, скорее всего, не удастся рассмотреть их все с помощью регулярного выражения.

Если вы действительно хотите убедиться, что строка содержит только число, любое число (целая или плавающая точка) и точно число, вы не можете использовать parseInt() / parseFloat() , Number() или !isNaN() сами по себе. Обратите внимание, что !isNaN() на самом деле возвращает true , когда Number() вернет число, а false , когда он вернет NaN , поэтому я исключу его из остальной части обсуждения.

Проблема с parseFloat() заключается в том, что она вернет число, если строка содержит любое число, даже если строка не содержит только и точно число:

parseFloat("2016-12-31") // returns 2016 parseFloat("1-1") // return 1 parseFloat("1.2.3") // returns 1.2 

Проблема с Number() заключается в том, что она вернет число в случаях, когда переданное значение не является числом вообще!

Number("") // returns 0 Number(" ") // returns 0 Number(" \u00A0 \t\n\r") // returns 0 

Проблема с переводом собственного регулярного выражения заключается в том, что если вы не создадите точное регулярное выражение для сопоставления числа с плавающей запятой, как признает Javascript, вы будете пропускать случаи или распознавать случаи, когда вам не следует. И даже если вы можете перевернуть свое собственное регулярное выражение, почему? Есть более простые встроенные способы сделать это.

Однако оказывается, что Number() (и isNaN() ) делает правильную вещь для каждого случая, когда parseFloat() возвращает число, когда это не должно, и наоборот. Итак, чтобы узнать, действительно ли строка точно и только номер, вызовите обе функции и посмотрите, вернут ли они оба истины:

Источник

Как проверить, что строка состоит исключительно из цифр?

Как проверить что в строке все цифры, и вернуть false если в строке не все цифры?

const numberValidator = (val) => < let Reg = new RegExp("/^\d+$/"); return Reg.test(val); >;

Простой 14 комментариев

var num = prompt(''); // ввод числа alert(testNum(num)); // true — только цифры, false — нет function testNum(num) < if (isNaN(+num)) < return false >else < return true >> alert(typeof num) // num остался строкой

Артём Кан, строка из цифр- не то же самое, что число Javascript.
isNaN(«1.1»)
А уже тем более, приведение типов в JS, там очень много приколов
https://developer.mozilla.org/ru/docs/Web/JavaScri.

var num = prompt(''); alert(testNum(num)) function testNum(num)

alert выведет true только, если в num цифры и/или точка/- (123 , .0 , 123. ). (просто точка/минус — false)
Да, если точку и минус нужно гнать, то функция не катит.

Артём Кан, еще раз, нужно смотреть на задачу, в общем случае, строка из цифр абсолютно не является числом в JavaScript.

Виталий Архипов, Я вот что вспомнил. А что если сделать еще проверку переменной num на отрицательность и целостность? Как Вы считаете?

Артём Кан, если вы проверите, является ли строка целым неотрицательным числом, то получите проверку «Является ли строка натуральным числом».

Артём Кан, математически это верно, на практике в JS есть свои подводные камни, как я вам показал на примере с isNaN, особенно с приведением типов, переполнением и т.д.

9007199254740991 + 2 === 9007199254740991 + 1

Для задачи, определить состоит ли строка из цифр, самое правильно использовать регулярное выражение. Приведение строки в число JS — отдельная история.

Виталий Архипов, я не отрицаю, что на практике, конечно, лучше не использоваться этот способ, так как придется делать множество проверок. Но чисто интересно можно ли проверить так.

Источник

Check if Sring Is a Number in JavaScript

Check if Sring Is a Number in JavaScript

  1. Use the isNaN() Function to Check Whether a Given String Is a Number or Not in JavaScript
  2. Use the + Operator to Check Whether a Given String Is a Number or Not in JavaScript
  3. Use the parseInt() Function to Check Whether a Given String Is a Number or Not in JavaScript
  4. Use the Number() Function to Check Whether a Given String Is a Number or Not in JavaScript
  5. Use the Regular Expressions to Check Whether a Given String Is a Number or Not in JavaScript

Number in the programming language is the data type that denotes integers, floats, etc. Strings represent all characters rather than just numeric values. Strings can contain numerical values.

We will check whether a given string is a number or not in this article.

Use the isNaN() Function to Check Whether a Given String Is a Number or Not in JavaScript

The isNaN() function determines whether the given value is a number or an illegal number (Not-a-Number). The function outputs as True for a NaN value and returns False for a valid numeric value.

console.log(isNaN('195')) console.log(isNaN('boo')) console.log(isNaN('100px')) 

If we want to create a function that returns true for a valid value, we can always do that by creating a function that negates the output of the isNaN() function.

function isNum(val)  return !isNaN(val) > console.log(isNum('aaa')); console.log(isNum('13579')); console.log(isNum('-13')); 

Now this function named isNum() will return true for a valid numeric value.

Use the + Operator to Check Whether a Given String Is a Number or Not in JavaScript

The + operator returns the numeric value of the string, or NaN , if the string isn’t purely numeric characters.

console.log(+'195') console.log(+'boo') 

Use the parseInt() Function to Check Whether a Given String Is a Number or Not in JavaScript

The parseInt() function parses a string and then returns an integer. It returns NaN when it is unable to extract numbers from the string.

console.log(parseInt('195')) console.log(parseInt('boo')) 

Use the Number() Function to Check Whether a Given String Is a Number or Not in JavaScript

The Number() function converts the argument to a number representing the object’s value. If it fails to convert the value to a number, it returns NaN.

We can use it with strings also to check whether a given string is a number or not.

console.log(Number('195')) console.log(Number('boo')) 

Use the Regular Expressions to Check Whether a Given String Is a Number or Not in JavaScript

Regular expressions are an object that describes a pattern of characters. These can be used to search the pattern, make changes to them, add, delete, etc.

We can use such patterns to check whether a string contains a number or not.

function isNumeric(val)   return /^-?\d+$/.test(val); >  console.log(isNumeric('aaa')); console.log(isNumeric('13579')); console.log(isNumeric('-13')); 

Related Article — JavaScript String

Источник

Оцените статью