2011-04-20 9 views
12

me gustaría usar Hibernate validador para validar algunas columnas. El problema, como yo lo entiendo, es que el marcador \ w en java no acepta letras con acentos en ellos.Accent en expresiones regulares en Java

¿Hay alguna forma de que pueda escribir la expresión regular para que palabras como Relatório puedan validarse? (No me gustaría escribir todas las letras con acentos entre paréntesis, porque espero escribir esta expresión regular en muchas columnas)?

Respuesta

23

El Java regex documentation tiene una sección de categorías de Unicode (búsqueda de "Clases para Unicode bloques y categorías"). Si solo busca letras, creo que \p{L} es la categoría que desea.

+1

increíble !! '\ p {L}' solo coincide con letras en cualquier idioma, ¡incluso acentuadas! Coincide con: '' 文字, 'символы',' '字符,' tähemärki' pero, duerma '♥ ♦ ♣ ♠ • ◘ ○ ◙♂♀ ♪ ♫ ☼►◄' o números. ¡Esto es perfecto! –

+0

este partido como Indiferente pregunta es: http://fiddle.re/htxcq6 –

+1

@Kuriel Añadir un '+' 'o' * hasta el final y funciona perfectamente bien. Lo que estás probando es hacer coincidir un solo personaje. –

7

tuve más suerte con:

\p{InCombiningDiacriticalMarks}+ 

en Java utilizo el siguiente método:

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

Este método elimina todo tipo de acentos perfectamente. vueltas ' "a a e C D I ñ"' 'en "a a e c u e n" '. Se normaliza asombrosamente. –

Cuestiones relacionadas