2012-11-07 125 views
0

我用這個正則表達式來檢查外地城市:正則表達式城市名稱

"[a-zA-Z]+[[ '-]?[a-zA-Z]+]*" 

但它的作品也很好的名字,如:

桑特「」「」'安傑洛

安德里亞---------巴列塔

我想說,特殊字符「」,「'」和「 - 」之間的單詞必須是唯一的一個。例如:

聖安傑洛,工會隆巴迪

它一定是好的,但不是:

桑特 '''安傑洛 - 隆巴迪業

+0

美國人不會喜歡你的,你的正則表達式不接受'D.C.' :) – biziclop

+0

這是真的。經過一點改變,現在它也喜歡美國人:) – Hoper

回答

4

要對括號使用括號:

[a-zA-Z]+(?:[ '-][a-zA-Z]+)* 

你嘗試過什麼([[ '-]?[a-zA-Z]+])表示一個字符類,包含[ '-]?[a-zA-Z]+,有效地等同與[a-zA-Z?+ '-]。另一方面的子模式用()分隔,而?:使它不被捕獲,這是一個微小的優化。

+0

非常有用,謝謝。 – Hoper

+0

那些罕見的(但有效的)名稱中包含數字字符的城市呢? – noogrub

+0

@noogrub好吧,給兩個字母字符類添加'0-9'。 –

0

使用此代碼來驗證城市:

public static boolean validateCity(String city) 
{ 
return city.matches("([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)"); 
}