SORU
31 Mayıs 2012, PERŞEMBE


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
31 Mayıs 2012, PERŞEMBE


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;
}

Live testbed | source

Eğer engellemek istiyorsanız 0 sadece > 0 >= 0 değiştirin.

Bu nasıl çalışır:

  1. Number(str): Bir sayı; sayı iyi bir kesirli bölümü olabilir, ya da NaN olabilir. str Dönüştürmek

  2. ~~: kesme numarası (herhangi bir kesirli bölümü kapalı pirzola).

  3. 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..)

  4. ... === str: Karşılaştıran özgün bir dize.

  5. 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);
}

Live testbed | source

Bu nasıl çalışır:

  1. ^: string başlangıç Maçı

  2. \ ?:, bir tek isteğe bağlı (eğer varsa bile bu kaldırma) Sağlar

  3. (?:...|...): bu iki seçenek (bir yakalama grubu oluşturmadan) İzin:

    1. (0|...): kendi... . 0 İzin ver

    2. (...|[1-9]\d*): ...bir numara ya da bir şey 0 dışında başlayan ve ondalık basamak herhangi bir sayı ile takip etti.

  4. $: 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).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • foreignimage

    foreignimage

    13 HAZİRAN 2006
  • Munchkin the Teddy Bear

    Munchkin the

    30 EYLÜL 2011
  • TokShogun

    TokShogun

    6 HAZİRAN 2009