2011-12-21 11 views
30

Düzenli ifadeler için biraz yeniyim ve düzenli ifadelerin kullanılmasına ihtiyaç duyulan bir miktar alanı için doğrulama yazımı yapıyorum.RegEx: 49'dan büyük tüm sayıları nasıl eşleştirebilirim?

50'den büyük veya eşit tüm sayıları nasıl eşleştirebilirim?

Ben
 
[5-9][0-9]+ 

denedik ama bu sadece 50-99 eşleşir. Tüm olası sayıları 49'dan daha büyük bir şekilde eşleştirmek için basit bir yol var mı?

+1

Sayısal bölümü ayıklamak için düzenli ifadeyi kullanmamanızın bir nedeni var mı, oradan buradan dönüştürüp sayı olarak test edermisin? Daha basit olurdu gibi görünüyor. –

+0

Sistemimize uymak için regex kullanması gerekiyor. Bu yorum bloğu için çok uzun ve bir hikaye sarsılmış. Başka bir yol var mı demeye gerek yok, onu kullanırdım. @ridgerunner sadece tamsayılar kullanılır. – Maxx

cevap

59

ilk basamak aralığında 5-9 olmak zorunda olduğu gerçeği sadece iki basamak halinde de geçerlidir. Tüm haneler kontrol ediyoruz, ve dize aslında bir sayıyı temsil eder emin olmak için çapa biten/başlayan etti

^([5-9]\d|\d{3,})$ 

Bu regexp'in: Yani, 2 basamak halinde bunun için kontrol edin ve doğrudan herhangi bir fazla basamağa izin . |, "veya" anlamına gelir, yani [5-9]\d veya 3 veya daha fazla basamağı olan herhangi bir sayı. \d sadece [0-9] için bir kısayoldur.

Düzenleme

: 001 gibi numaralar izin vermemek için:

^([5-9]\d|[1-9]\d{2,})$ 

Bu değil 3 veya daha fazla basamaklı durumunda bir sıfır olması ilk basamağı zorlar.

+0

Vay, bu harika! Çok teşekkür ederim. – Maxx

+1

Açıklama için de teşekkürler. Gerçekten bir şey öğrendim gibi hissediyorum. +1 – Maxx

+0

@pimvdb: '^' ve '$' kullanımınız, tüm dizenin sayısal olduğunu ima eder. Bu soruyu soruyor, neden bir regex gerekli? –

1

bu regex deneyin (sadece tamsayılar kullanılır):

[5-9]\d+|\d{3,} 
+0

Bu yakın, ancak '444' gibi sayılar eşleşmiyor. – Maxx

+0

Güncelleştirilmiş sürümü çalışıyor görünüyor! – Maxx

4

50-99 eşleşen bir koşullu grup veya üç veya daha fazla basamaklı herhangi bir dize deneyin: Ben yayınlanmıştır iyi bir cevap zaten orada olduğunu biliyorum

var r = /^(?:[5-9]\d|\d{3,})$/ 
17

, ancak baştaki sıfırları izin vermeyecektir. Ben (mümkünse sıfır dolgulu) 99 arasındaki numaraları 50 maç

Birincisi: Ve İşte benim baştaki sıfırları izin çözüm ... Yorum bırakmak için yeterli bir üne sahip, bu yüzden yok

0*[5-9]\d 

Sonra (aynı zamanda lider sıfırlarla) yukarıdaki 100 numaraları maç ve:

0*[1-9]\d{2,} 

ile bunları birbirine ekleyin "veya" ve bütün cümleyi maç için kesmek:

^0*([1-9]\d{2,}|[5-9]\d)$ 

İşte bu kadar!

1

Next matches tüm büyük veya ona eşit 11100 için:

^([1-9][1-9][1-9]\d{2}\d*|[1-9][2-9]\d{3}\d*|[2-9]\d{4}\d*|\d{6}\d*)$ 

For greater or equal50:

^([5-9]\d{1}\d*|\d{3}\d*)$ 

desen Bkz herhangi bir sayıda değiştirin. Ayrıca büyük sayılar için bazı özyineli ileri/geri operatörler bulmak harika olurdu.

İlgili konular