2012-11-07 2 views
0

내가 필드시 확인하려면이 정규식을 사용정규 표현식은 도시 이름이

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

을하지만 같은 이름으로도 잘 작동합니다

산트 '' '' '안젤로

Andria --------- Barletta

특수 문자 "", " '"및 "-"를 단어는 단 하나뿐이어야합니다. 예를 들어 :

탄 - 데이 롬바르디

이 좋은,하지만해야합니다

산트 '' '안젤로 --- 데이 롬바르디

+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]+)"); 
}