2013-08-22 38 views
1

我有正則表達式^\d{5}$|^\d{5}-\d{4}*$"它檢查了美國郵政編碼。 但我需要檢查「zip, zip, zip」該怎麼做?如何設置重複正則表達式?

我想這^(\d{5}$|^\d{5}-\d{4},)*$但它不能正常工作

+0

它一直出現三次,還是一個未定義的數字? –

+0

未定義編號 – Mediator

+0

如果您有重複,請勿在重複塊中放置'$'。 – dasblinkenlight

回答

4

嘗試

((^|,)(\d{5}|\d{5}-\d{4}))*$ 

測試儀:http://regexr.com?36297

每場比賽必須由(^|,)由字符串的開頭或,(逗號分隔)

注意前面,這樣你在.NET中不應該使用\d,因爲٠١٢٣٤\d! (在.NET \d包括非ASCII的Unicode數字)。 [0-9]通常更好。

+0

好,我需要空間添加'12345,12345' – Mediator

+0

@Mediator使用此:'((^ |,\ s *)(\ d {5} | \ d {5} - \ d {4}))* $ ' – Jerry

+0

@Mediator更正 – xanatos

0

你看起來需要的表達式是:

^\d{5}(|-\d{4})(,\d{5}(|-\d{4}))*$ 

你試圖寫入的一個是:

^(\d{5}|\d{5}-\d{4},)*$ 

但會要求每個ZIP都有一個尾隨逗號,這是最後一個不會有的。

打破給出了答案,

  • \d{5}(|-\d{4})是你原來的變種,而是簡單地使-1234可選。
  • (,\d{5}(|-\d{4}))*是第一個以逗號開頭的正則表達式,允許零次或多次。
0

我會用這個速度:

^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)*$ 

擴大

^
\d{5} 
(?: - \d{4})? 
(?: 
     , \s* \d{5} 
     (?: - \d{4})? 
)* 
$ 

這對於速度/靈活性:

^\s*\d{5}(?:\s*-\s*\d{4})?(?:\s*,\s*\d{5}(?:\s*-\s*\d{4})?)*\s*$ 

擴大

^
\s* 
\d{5} 
(?: \s* - \s* \d{4})? 
(?: 
     \s* , \s* \d{5} 
     (?: \s* - \s* \d{4})? 
)* 
\s* 
$