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

  • HTC

    HTC

    12 Ocak 2006
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009
  • wowchick16

    wowchick16

    17 Mart 2007