SORU
20 AĞUSTOS 2008, ÇARŞAMBA


JavaScript doğrulama ondalık sayılar - IsNumeric()

JavaScript ondalık sayıları doğrulamak için en temiz, en etkili yolu nedir?

Bonus puan için:

  1. Netlik. Çözüm açık ve basit olmalıdır.
  2. Çapraz platform.

Test durumları:

 01. IsNumeric('-1') => true
 02. IsNumeric('-1.5') => true
 03. IsNumeric('0') => true
 04. IsNumeric('0.42') => true
 05. IsNumeric('.42') => true
 06. IsNumeric('99,999') => false
 07. IsNumeric('0x89f') => false
 08. IsNumeric('#abcdef')=> false
 09. IsNumeric('1.2.3') => false
 10. IsNumeric('') => false
 11. IsNumeric('blah') => false

CEVAP
2 Aralık 2009, ÇARŞAMBA


@Joel's answer oldukça yakın olmasına rağmen, aşağıdaki durumlarda başarısız olur:

// Whitespace strings:
IsNumeric(' ') == true;
IsNumeric('\t\t') == true;
IsNumeric('\n\r') == true;

// Number literals:
IsNumeric(-1) == false;
IsNumeric(0) == false;
IsNumeric(1.1) == false;
IsNumeric(8e5) == false;

Bir süre önce bir değişken sayısal bir değer içeriyorsa öğrenmek için IsNumeric bir işlevi, uygulamak zorunda kaldımne olursa olsun türü, String bir sayısal değeri (gösterim, vb Ayrıca üstel dikkate almak zorundaydım.) içeren, olabilir Number Her tür varsayım, türü zorlama (örn. bakımı gelemedim, hemen hemen her şeyi bu işleve olabilir, nesne true == 1; true "numeric") olarak kabul edilmemelidir.

30 unit tests (old link) değer paylaşımı bu set birçok işlevi uygulamaları için yapılmış olduğunu düşünüyorum, ve aynı zamanda tüm testleri geçen bir hisse:

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

Güncelleme: Here's how jQuery does it now (Mid-2014) :

isNumeric: function( obj ) {
    return !jQuery.isArray( obj ) && (obj - parseFloat( obj )   1) >= 0;
}

S. S.isNaN & isFinite kafa karıştırıcı bir davranış sayıda zorla dönüşüm nedeniyle. İçinde ES6, Number.isNaN & Number.isFinite bu sorunları düzeltmek istiyorum. Onları kullanırken aklınızda bulunsun.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • Easy Learn Tutorial

    Easy Learn T

    10 Kasım 2012
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013