2012-04-22 26 views
63

Possible Duplicate:
Check if a variable contains a numerical value in Javascript?JavaScript değerinin "tamsayı" olup olmadığını belirleme

JQuery'de değişkenin bir tam sayı olup olmadığını nasıl kontrol ederim?

Örnek:

if (id == int) { // Do this } 

Im kullanarak URL'den kimliğini almak için aşağıdaki.

var id = $.getURLParam("id"); 

Ancak değişkenin bir tamsayı olup olmadığını kontrol etmek istiyorum. o sayısal bulunuyor

if(Math.floor(id) == id && $.isNumeric(id)) 
    alert('yes its an int!'); 

$.isNumeric(id) denetler olsun veya gerçekten tamsayı değeri değil, bir şamandıra var değilse
Math.floor(id) == id sonra belirleyecek:

+13

"Yinelenen", bir * sayısal * değeri olup olmadığını kontrol eder, bu bir * tümleşik sayısal değer değil. Çok farklı. –

+0

+1 Diğer sayıdaki bilgilerin ilginç ve ilgili olmasına rağmen bu bir kopya değil. Sayısal bir değer mutlaka bir tamsayı değildir. – phn

cevap

152

bu deneyin. Eğer int bölündüğü bir float ise, orijinal değerden farklı bir sonuç verecektir. Eğer int ise ikisi de aynı olacak.

+1

Bu yaklaşımı da beğeniyorum ve – Marc

+0

numaralı yanıtı verdim. Bu, "Number" türünü kullanmanız durumunda (ki bu nadirdir, ancak mümkün) –

+0

@pst ile başarısız olacaktır. Bu gerçeği bilerek ama evet, bu mükemmel bir şekilde hataya düşebilir – bardiir

23

jQuery'nin IsNumeric yöntemini kullanın.

http://api.jquery.com/jQuery.isNumeric/

if ($.isNumeric(id)) { 
    //it's numeric 
} 

DÜZELTME: Bir tamsayı sağlamak olmaz. Bu olacaktır:

if ((id+"").match(/^\d+$/)) { 
    //it's all digits 
} 

elbette jQuery kullanmaz, o, ama jQuery sürece çözüm

+0

Bu olacak int olmayan değerler için de geçerlidir. '$ .ısNümerik (3.14) => doğru ' – bardiir

+0

@bardiir, teşekkürler. Göndermeden ve güncellemeden önce bir an fark ettim. – Marc

+0

Şimdi biraz daha meraklıyım, öneri gibi düzenli bir ifade veya benimki gibi bir tür döküm: D – bardiir

47

@bardiir çalışır gibi aslında zorunlu değilse kontrol etmek için benzer bir yöntem kullanır varsayalım bir değer sayısal veya değil. Ancak bu yöntem çok daha basittir.

/* 
    I just realized that +n === parseInt(n) won't filter strings. Hence I modified it. At least now it doesn't require any extra function calls. 
*/ 

function isInt(n) { 
    return +n === n && !(n % 1); 
} 

+n bir sayıya n coerces. Sonra bir tamsayı olup olmadığını kontrol etmek için sıkı eşitlik (===) kullanırız. Basit ve verimli.

Düzenleme: birçok insan sayısal türleri için kontrol etmeniz gerekir gibi görünüyor, bu yüzden o kadar sık ​​amaçla kullanmak fonksiyonların bir listesini paylaşacağız: Bunun için yararlıdır

/* 
    -9007199254740990 to 9007199254740990 
*/ 

function isInt(n) { 
    return +n === n && !(n % 1); 
} 

/* 
    -128 to 127 
*/ 

function isInt8(n) { 
    return +n === n && !(n % 1) && n < 0x80 && n >= -0x80; 
} 

/* 
    -32768 to 32767 
*/ 

function isInt16(n) { 
    return +n === n && !(n % 1) && n < 0x8000 && n >= -0x8000; 
} 

/* 
    -2147483648 to 2147483647 
*/ 

function isInt32(n) { 
    return +n === n && !(n % 1) && n < 0x80000000 && n >= -0x80000000; 
} 

/* 
    0 to 9007199254740990 
*/ 

function isUint(n) { 
    return +n === n && !(n % 1) && n >= 0; 
} 

/* 
    0 to 255 
*/ 

function isUint8(n) { 
    return +n === n && !(n % 1) && n < 0x100 && n >= 0; 
} 

/* 
    0 to 65535 
*/ 

function isUint16(n) { 
    return +n === n && !(n % 1) && n < 0x10000 && n >= 0; 
} 

/* 
    0 to 4294967295 
*/ 

function isUint32(n) { 
    return +n === n && !(n % 1) && n < 0x100000000 && n >= 0; 
} 

/* 
    Any number including Infinity and -Infinity but not NaN 
*/ 

function isFloat(n) { 
    return +n === n; 
} 

/* 
    Any number from -3.4028234e+38 to 3.4028234e+38 (Single-precision floating-point format) 
*/ 

function isFloat32(n) { 
    return +n === n && Math.abs(n) <= 3.4028234e+38; 
} 

/* 
    Any number excluding Infinity and -Infinity and NaN (Number.MAX_VALUE = 1.7976931348623157e+308) 
*/ 

function isFloat64(n) { 
    return +n === n && Math.abs(n) <= 1.7976931348623157e+308; 
} 

Umut birisi.

+0

+1 çok güzel çözüm! – bardiir

+1

Evet ve "NaN", "Infinity" ve "-Infinity" gibi olası tüm test durumları için çalışıyor. –

+0

@AaditMShah Bunu beğendim. – Marc

İlgili konular