2016-07-08 4 views
-1

Я пытаюсь проверить, является ли строка текстом или номером. Не удалось найти правильный способ проверки. Не могли бы вы посоветоваться?Как проверить, является ли строка не числом

Вот моя проблема:

var myNumber = "006"; 
var myText = "1. This is not a number"; 

isNaN(myNumber); // false 
isNaN(myText); // false 

I tried also: 
isNaN(myNumber.split('.')[1]); // true 
isNaN(myText.split('.')[1]); // true 

parseInt(myNumber); // 6 
parseInt(myText); // 1 

То, что я хотел бы достичь было бы найти, когда строка может быть преобразована в число (см MyNumber). В случае, если строка на самом деле является текстом, как определить его с помощью javascript?

Не могли бы вы посоветовать?

+1

использование некоторое регулярное выражение? –

+0

Попытайтесь увидеть здесь http://stackoverflow.com/questions/1303646/check-whether-variable-is-number-or-string-in-javascript – feeeper

+2

На мой взгляд, самый простой способ - умножить переменную на 1 и проверить если результатом является NaN, то есть 'isNaN (myVariable * 1)' – pawel

ответ

1

Если parseInt() не подходит для желаемых результатов, вы можете попробовать Number конструктор. Он дает вам NaN для номеров, которые вы можете проверить, используя функцию isNaN().

var myNumber = "006"; 
 
var myText = "1. This is not a number"; 
 

 
console.log(Number(myNumber)); 
 
console.log(Number(myText));

Или вы можете использовать регулярные выражения:

var myNumber = "006"; 
 
var myText = "1. This is not a number"; 
 

 
var numRegex = /^\d+$/; 
 

 
console.log(numRegex.test(myNumber)); 
 
console.log(numRegex.test(myText));

+0

Я думаю, что решение с конструктором 'Number' является лучшим! –

+0

Спасибо @DmitryMasley –

4

Если я понял ваш вопрос правильно, я может быть решение, но это будет работать, даже если строка - это номер, так что вы здесь:

var yourNumber="55"; 
if(yourNumber*1==yourNumber){ 
alert("It's a number"); 
}else{alert("it's not a number");} 
+0

Это не работает для меня, поскольку я использую ExtendScript. Как насчет строки yourNumber = "55. Bla bla bla"? – addme

0
var reg = new RegExp('^[0-9]*$'); 
var myNumber = "006"; 
var myText = "1. This is not a number"; 
reg.test(myNumber) //true 
reg.test(myText) //false 
+0

Привет, спасибо, спасибо. Я тоже так пытался, но я забыл включить знак $. – addme

0

Вы можете проверить, если текст является число с помощью функции IsNaN:

var myNumber = "006"; 
 
var myText = "1. This is not a number"; 
 

 
console.log(myNumber + ': ' + !isNaN(myNumber)); 
 
console.log(myText + ': ' + !isNaN(myText));

+0

Да, он работает в браузере. Я забыл сказать, что я использую Adobe ExtendScript. – addme

0

Вы можете использовать регулярное выражение.

function isNumber(num){ 
    return /^(\d+)?(\.)?\d+$/.test(num); 
} 

isNumber("006") // true 
isNumber(".6") // true 
isNumber("1 not a number") // false 
isNumber("23.63") // true 
isNumber("23.6.3") // false 
0

Короткий рассказ:

Я бы действительно использовать оператор typeof.

От isNaN() | JavaScript MDN:

isNaN() функция определяет, является ли значение Not-A-Number или нет.... вы также можете использовать Number.isNaN(), как определено в ECMAScript 6, или вы можете использовать typeof, чтобы определить, является ли значение Not-A-Number.

Длинная история:

Пробовал следующее в консоли узла.

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

isNaN(123)   // false 
isNaN(true)   // false 
isNaN("123")   // false 
isNaN({})   // true 
isNaN(undefined)  // true 

В сравнении с функцией глобального IsNaN(), Number.isNaN() не страдает проблему силой преобразования параметра в число. Это означает, что теперь безопасно передавать значения, которые обычно конвертируются в NaN, но на самом деле не имеют то же значение, что и NaN. Это также означает, что только значения номера типа, которые также являются NaN, возвращают true.

Number.isNaN(undefined)  // false 
Number.isNaN({})    // false 
Number.isNaN(true)   // false 
Number.isNaN(123)   // false 
Number.isNaN(NaN)   // true 
Number.isNaN(0/0)   // true 

typeof оператор возвращает строку, указывающую тип невычисленного операнда.

typeof(123)   // number 
typeof("123")   // string 
typeof(true)   // boolean 
Смежные вопросы