2011-04-20 17 views
12

मैं कुछ कॉलम मान्य करने के लिए हाइबरनेट वैलिडेटर का उपयोग करना चाहता हूं। समस्या, जैसा कि मैं समझता हूं, यह है कि जावा में \ w मार्कर उन पर उच्चारण के साथ अक्षरों को स्वीकार नहीं करता है।जावा में नियमित अभिव्यक्ति में एक्सेंट

है वहाँ किसी भी तरह से है कि मैं regexp लिख सकता है ताकि Relatório जैसे शब्दों मान्य किया जा सकता है (मैं कोष्ठक के बीच लहजे के साथ सभी पत्र लिखने के लिए नहीं करना चाहते, क्योंकि मैं कॉलम का एक बहुत में इस regexp लेखन होने की उम्मीद)?

उत्तर

23

Java regex documentation यूनिकोड श्रेणियों पर एक अनुभाग है ("यूनिकोड ब्लॉक और श्रेणियों के लिए कक्षाएं" के लिए खोजें)। यदि आप सिर्फ अक्षरों की तलाश में हैं, तो मुझे लगता है कि \p{L} वह श्रेणी है जो आप चाहते हैं।

+1

कमाल !! '\ p {एल} 'किसी भी भाषा में केवल अक्षरों से मेल खाता है, यहां तक ​​कि accentuated वाले! यह मेल खाता है: '文字', 'символы',' 字符 ',' tähemärki' लेकिन यह '♥ ♦ ♣ ♠ • ◘ ○ ◙♂♀ ♪ ♫ ☼►◄' या संख्या नहीं है। यह पूर्ण है! –

+0

यह पूछताछ के रूप में मेल नहीं खाता है: http://fiddle.re/htxcq6 –

+1

@ कुरियल अंत में '+' या '*' जोड़ें और यह पूरी तरह से अच्छी तरह से काम करता है। आप जो परीक्षण कर रहे हैं वह एक ही चरित्र से मेल खाता है। –

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

यह विधि पूरी तरह से उच्चारण के सभी प्रकार को हटा देती है। 'a a à ê ç ï ï" '' '' '' ए 'ए ई सी यू आई एन' 'में बदल जाता है। यह अजीब तरह से सामान्य है। –

संबंधित मुद्दे