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

  • brokenbellsVEVO

    brokenbellsV

    11 EYLÜL 2009
  • Strata1000

    Strata1000

    28 EYLÜL 2009
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011

İLGİLİ SORU / CEVAPLAR