2012-10-26 14 views

cevap

12

için 3 isteğe bağlı bir basamak:

^\d{2}\d{3}?$ 

Not Bazı normal ifade motorlar için sorunlara neden gibi görünen bir ungreedy modifiye gibi, herhangi bir tekrarlama değiştiricisi (hatta sabit bir) sonra ? yorumlamak olacağı iki basamaklı durum. Eğer bu karşılaşırsanız, kullanın:

^\d{2}(?:\d{3})?$ 

Sen this great tutorial bazı regex temelleri üzerinde okuyabilir. Bu arada

, yukarıdaki kullanarak münavebe buna etkili bir eşdeğer (ama marjinal daha verimli) 'dir:

^(?:\d{2}|\d{5})$ 

(. Sadece sana başka regex kavramı gösteren uğruna)

+0

-1. Java'da birincisi yanlış. "?" Tembel eşleşmeyi gösterir. – nhahtdh

+0

@nhahtdh, yalnızca {..} 'bir aralıktaysa mı, değil mi? –

+0

@ m.buettner: Tekrarlama sayısı sabit olduğunda normalden farklı düşünmüyorum, ama “?” Tembellik olarak yorumlanacaktır. – nhahtdh

0
/^\A\d{2}\z$|^\A\d{5}\z$/ 

A girişin başlangıcı ve z girişinin anlamı anlamına gelir.

Bu PHP ve JAVA için çalışır

; js veya perl hakkında emin değilim.