2010-05-27 26 views
9

Kabul eden bir normal ifade oluşturmaya çalışıyorum: Boş bir dize, tek bir tamsayı veya virgülle ayrılmış birden çok tam sayı ancak başlangıç ​​ve bitiş virgüllerine sahip olamaz. Regex: Virgülle ayrılmış tamsayılar

Bunu bulmayı başardılar ama

^\d{1,10}([,]\d{10})*$ 
+0

Not 've muhtemelen yazmak istedim ([,] \ d {1,10}) * 'yerine [(,] \ d {10}) *'. –

cevap

30

boş bir dize maç olmayacak böylece yine de gönderilebilir şey, en az 1 tamsayı gerektirir:

^(\d+(,\d+)*)?$ 

Açıklamalı: Burada

ne ihtiyaç vardır:

  1. böylece '?' ile parantez ve sonunda tüm şey koymak boş dizeyle eşleşecek.
  2. daima bir tamsayı ile başlar, bu yüzden '\d+'. 1 veya daha fazla basamaklı karakterler ('0'-'9')
  3. Sonra ',\d+' içeren parantez bir dizi yapmak ve ondan sonra bir yıldız işareti koymak olduğunu bu.
    3a. İç araç, bir ',' sonra bir tamsayı ile başlar. 3b. Yıldız işareti, 0 veya daha fazla kez parantez içindeki her şeyi tekrarlamak anlamına gelir.

Hench her şey either an empty string or start with an integer then repeat zero or more times a string which starts with a comma and ends with an integer

+0

Tüm işler ama bir tane seçtim, ilk önce geldim, aldım, teşekkürler :) –

+1

@Metzu, İlkinin boş bir dizeyle eşleşmediğine dikkat edin ... – tster

+0

Doğru cevap olarak işaretlenmelidir. – Spike

3

{1,10} ve {10} aralıkları vardır haneli sınırını nasıl kaldırılacağını undertsand olamaz. Sonsuz pozitif için bunları + ile değiştirebilirsiniz. Örn .:

^\d+([,]\d+)*$ 
+2

Ayrıca köşeli parantezleri virgülün etrafına da aktarabilirsiniz. –

+0

Methinks haklısın. – troelskn

1

izlemeyi deneyin geçerli: `[,]` `eşdeğerdir` o

^(\d+(,\d+)*)?$ 
+0

Bunun için teşekkürler :) –

İlgili konular