2015-07-26 2 views
2

parseInt("[email protected]") возвращает 123, который является числом.Как определить, является ли «[email protected]» не число в javascript?

Есть множество функций, чтобы определить, есть ли что-то или нет, но все они зависят от parseInt.

Что еще один общий способ обнаружить, что это не целое число без использования регулярных выражений?

+0

Что не так с использованием 'parseInt'? Функции, которые я видел, которые используют это, чтобы определить, является ли что-то числом, говорят, что ваш вход не один. – Quentin

+0

Дубликат этого? http://stackoverflow.com/questions/3885817/how-to-check-that-a-number-is-float-or-integer – terrorfall

+2

Как насчет некоторых хороших документов: https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger –

ответ

3
if (isNaN("[email protected]")) 
{ 
alert("IsNaN - not a number"); 
} 
else 
{ 
alert ("it is a number"); 
} 

Я предполагаю, что ОП необходимо различать, является ли ввод числом или нет. Если ввод float или целочисленный объект не имеет отношения к его проблеме. Возможно, я ошибаюсь ...

EDIT: Хорошо, чтобы все были счастливы, целое число в javasript довольно большое. Как большое целое число находится в проверке javascript here.

Если у вас есть вопрос, задано ли целое число, это целое число между 9007199254740992 и -9007199254740992. Целостность числа можно проверить с помощью модуля упругости %

$("#cmd").click(function (e) { ChectIfInteger($("#txt").val()) }); 
 

 
function ChectIfInteger(myval){ 
 

 
    if (isNaN(myval)){ 
 
    alert("not integer (not number)") 
 
    } 
 
    else{ 
 
    
 
    //it is a number but it is integer? 
 
    if(myval % 1 == 0){ 
 
    
 
     if (myval <= 9007199254740992 && myval >= -9007199254740992) 
 
     { 
 
      alert("it is integer in javascript"); 
 
     } 
 
     else{ 
 
      alert ("not integer"); 
 
     } 
 
    } 
 
    else{ 
 
     alert("nope, not integer"); 
 
    } 
 
    
 
    
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input type="text" id="txt"/> 
 
<input type="button" id="cmd" value="test input">

+0

'isNaN (" 123 ")' возвращает false – NeoWang

+3

Потому что 'isNan' возвращает true, если аргумент arg * not * number. 123 - это число, поэтому оно возвращает false. –

+0

@NeoWang ** ** ** N ** ot ** A ** ** N ** umber "так ложно означает, что это число в этом случае ... – epascarello

1

Преобразование обратно в строку и сравнить:

String(parseInt("123"))=="123" // true 
String(parseInt("123.sdfs"))=="123.sdfs" //false 
0

Я думаю, что это лучший способ проверить для целых чисел:

function isInt(str) { 
    if (typeof str !== 'number' && typeof str !== 'string') { 
     return false; 
    } 

    return str % 1 === 0; 
} 

Просто отметьте, что строки/цифры, такие как «123.0», оцениваются как true.

1

Если вы действительно хотите проверить «для действительного целого» вы должны объединить isNaN с чем-то другим, как это:

function isValidInteger(numberToTest) { 
    return !(isNaN(numberToTest) || String(parseInt(numberToTest)) !== numberToTest.toString());  
} 

Это будет оценивать как:

console.log(isValidInteger('[email protected]')); // false 
console.log(isValidInteger('123231.23')); // false 
console.log(isValidInteger('12323')); // true 
console.log(isValidInteger(1e-1)); // false 
console.log(isValidInteger('1e-1')); // false 

И эта работа даже с числами. Here is PLNKR для проверки.

+0

'isValidInteger (" 1e-1 ")' :) – Pointy

+0

Вы были правы. исправлено сейчас –

0

Вот и еще одна, которая не опирается на струнной материал:

function looksLikeInteger(n) { 
    return +n == n && +n === ~~n; 
} 

Вероятно, следовало бы назвать «looksLikeJavaScriptInteger», потому что он работает только для 32-битных целых чисел. Он принуждает к numeric с унарным +, а затем проверяет равенство (поэтому отбрасываются уродливые строки и объекты), а затем проверяет, не изменилось ли числовое значение при принуждении к целому числу.

Смежные вопросы