Bir dize pozitif bir tamsayı olduğunu doğrulamak
Basit, hatasız test JavaScript dize pozitif bir tamsayı olduğunu kontrol etmek istiyorum.
isNan(str)
tamsayı olmayan değerleri her türlü için doğru verir ve parseInt(str)
yüzer dizeleri tamsayı dönüyor,"". 2.5 gibi Ve bazı jQuery eklenti de kullanmak istemiyorum.
CEVAP
Sana iki cevap:
Ayrıştırma dayalı
Düzenli ifade
Her iki durumda da," dahil 0
pozitif olsa bile 4**,. "pozitif tamsayı yorumladım unutmayın Eğer 0
izin vermemek için isterseniz ben notlar vardır.
Ayrıştırma dayalı
Eğer bu değerler makul aralığında normalize ondalık tamsayı bir dize olmak istiyorsanız, bunu yapabilirsiniz:
function isNormalInteger(str) {
var n = ~~Number(str);
return String(n) === str && n >= 0;
}
Eğer engellemek istiyorsanız 0
sadece > 0
>= 0
değiştirin.
Bu nasıl çalışır:
Number(str)
: Bir sayı; sayı iyi bir kesirli bölümü olabilir, ya daNaN
olabilir.str
Dönüştürmek~~
: kesme numarası (herhangi bir kesirli bölümü kapalı pirzola).String(...)
: sonuç normal ondalık bir dizeye geri Dönüştürür. Çok büyük sayılar için, bu yaklaşım kırılarak bilimsel gösterim, gidecek. (Pek bilemiyorum nerede ayrılır, the details are in the spec ama bütün sayılar sanırım bu noktada ettin aştı 21 basamak [o zaman sayı var olmak çok belirsiz, IEEE-754 çift duyarlıklı sayılar sadece roughtly 15 basamak hassasiyet..)... === str
: Karşılaştıran özgün bir dize.n >= 0
: pozitif Kontrol edin.
Bu 18 ** giriş ve String(...)
Bu aşamada aynı bilimsel gösterimde geri dönüş olmadığını bilimsel gösterimde herhangi bir giriş için başarısız olduğunu unutmayın. Eski kolay bir düzeltme değil, çok çok sonraları, ama sadece ilgili çok, çok büyük sayılar için.
Düzenli İfade
Diğer yaklaşım, test karakterleri dizesi yoluyla bir düzenli ifade, eğer hedefiniz sadece izin ver (say) isteğe bağlı
ardından da 0
string içinde normal ondalık biçimi:
function isNormalInteger(str) {
return /^\ ?(0|[1-9]\d*)$/.test(str);
}
Bu nasıl çalışır:
^
: string başlangıç Maçı\ ?
:,(?:...|...)
: bu iki seçenek (bir yakalama grubu oluşturmadan) İzin:(0|...)
: kendi... .0
İzin ver(...|[1-9]\d*)
: ...bir numara ya da bir şey0
dışında başlayan ve ondalık basamak herhangi bir sayı ile takip etti.
$
: dize sonu Maç.
İsterseniz izin vermemek 0
(çünkü değil olumlu), normal ifade olur sadece /^\ ?[1-9]\d*$/
(örneğin, biz kaybetmek değişim biz gerekli izin 0
).
Nasıl bir dize bir tamsayı olduğunu ko...
Objective C onaltılık dize tamsayı içi...
Hızlı Dize 32 bit tamsayı ile düşük ça...
Bir tamsayı bir dize dönüştürmek...
Nasıl'bir dize dönen s bir değere...