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

  • amc

    amc

    21 EYLÜL 2005
  • Pepsi

    Pepsi

    1 Kasım 2005
  • Sam Kear

    Sam Kear

    14 Temmuz 2007