2011-04-20 14 views
12

yılında Normal İfade'de bazı sütunları doğrulamak için hazırda Doğrulayıcı kullanmak istiyorum. Anladığım gibi, problem, java'daki \ w işaretçisinin, üzerlerinde vurgularla harfleri kabul etmemesidir.Accent Java

Regex'i yazabilmem için herhangi bir yolu var mı? Böylece Relatório gibi sözcükler doğrulanabilir (tüm harfleri parantez içinde yazmak istemem, çünkü bu regexp'i bir çok sütunda yazmayı beklerim))?

cevap

23

Java regex documentation, Unicode kategorilerinde bir bölüme sahiptir ("Unicode blokları ve kategorileri için sınıflar" konusunu araştırın). Sadece harf arıyorsanız, bence \p{L} istediğiniz kategoridir.

+1

!! '\ p {L}', herhangi bir dilde, hatta vurgulanmış olanlarda sadece harflerle eşleşir! '字符' '文字' 'символы'' tähemärki' ama '♥ ♦ ♣ ♠ • ◘ ○ ◙♂♀ ♪ ♫ ☼►◄' veya numaralar doesnt: Bu eşleşir. Bu harika! –

+0

bu konuyla eşleşmiyor: http://fiddle.re/htxcq6 –

+1

@Kuriel Sonuna '+' veya '*' ekleyin ve mükemmel bir şekilde çalışıyor. Test ettiğin şey tek bir karakterle eşleşiyor. –

7

Birlikte daha şanslıydım: java olarak

\p{InCombiningDiacriticalMarks}+ 

Ben aşağıdaki yöntemi kullanın: Şaşırtıcı

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

Bu yöntem her türlü aksanı mükemmel bir şekilde giderir. "a" e "a" a "a" a dönüşür. Tuhaf bir şekilde normalleşir. –