2011-04-20 5 views
12

Hibernate Validator를 사용하여 일부 열의 유효성을 검사하고 싶습니다. 이해할 수있는 문제는 자바의 \ w 마커가 악센트가있는 문자를 허용하지 않는다는 것입니다.Java의 정규 표현식의 악센트

Relatório와 같은 단어의 유효성을 검사 할 수 있도록 정규 표현식을 쓸 수있는 방법이 있습니까? (대괄호 사이에 악센트가있는 모든 문자를 쓰고 싶지는 않습니다.이 정규 표현식을 많은 열에 쓰려고하기 때문에)?

답변

23

Java regex documentation에는 유니 코드 범주에 대한 섹션이 있습니다 ("유니 코드 블록 및 범주 용 클래스"검색). 당신이 편지를 찾고 있다면, 나는 \p{L}이 당신이 원하는 범주라고 생각합니다.

+1

을! '\ p {L}'은 모든 언어의 글자와 일치합니다. '문자','문자','문자','문자'와 일치하지만'''''''''''''''''''''''''''''''''입니다. 이것은 완벽 해! –

+0

질문과 일치하지 않습니다. http://fiddle.re/htxcq6 –

+1

@Kuriel 끝 부분에'+'또는'* '를 추가하면 완벽하게 작동합니다. 테스트중인 것은 단일 문자와 일치하는 것입니다. –

7

내가 더 운이 : 자바에서

\p{InCombiningDiacriticalMarks}+ 

나는 다음과 같은 방법을 사용 : 놀라운

import java.text.Normalizer; 
import java.text.Normalizer.Form; 

public static String removeAccents(String text) { 
    return text == null ? null : 
     Normalizer.normalize(text, Form.NFD) 
      .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
} 
+1

이 방법은 모든 종류의 악센트를 완벽하게 제거합니다. '''''''''''''''''으로 변환합니다. 그것은 굉장히 정상화된다. –

관련 문제