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:
- Netlik. Çözüm açık ve basit olmalıdır.
- Ç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
@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.
Nasıl ondalık JavaScript hex dönüştürm...
JavaScript içinde en fazla 2 ondalık y...
JavaScript: sayı biçimlendirme tam ola...
Nasıl eclipse projemde javascript doğr...
JSLint kullanın veya JavaScript doğrul...