2009-02-06 11 views
10

पहले से ही similar question है।अन्य विशेष वर्णों को संरक्षित करते समय स्ट्रिंग से उच्चारण/डायक्रिटिक्स को हटाकर (mb_chars.normalize और iconv)

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s 

कौन सा चमत्कार काम करता है, जब तक आप इसे भी रिक्त स्थान, डॉट्स, डैश को हटा नोटिस, और जो और क्या जानता है: समाधानों में से एक इस तरह कोड का उपयोग करता है।

मुझे सच में यकीन नहीं है कि पहला कोड कैसे काम करता है, लेकिन इसे केवल उच्चारण को स्ट्रिप करने के लिए बनाया जा सकता है? या कम से कम वर्णों की एक सूची को संरक्षित करने के लिए दिया जाना चाहिए? regexps की मेरी जानकारी छोटा है, लेकिन मैं (कोई लाभ नहीं हुआ) की कोशिश की:

string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub 
    (/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s 

नृशंस:

/[^\-x00-\x7F]/n # So it would leave the dash alone 

मैं इस तरह कुछ करने के लिए के बारे में कर रहा हूँ? हाँ ...

मैं भी कोशिश की है:

iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1 
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é" 

मदद कृपया?

उत्तर

11

यह रिक्त स्थान, बिंदुओं, डैश को भी हटा देता है, और कौन जानता है और क्या जानता है।

यह नहीं होना चाहिए।

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s 

आपने गलत टाइप किया है, एनएलएल चरित्र को संदर्भित करने के लिए x00 से पहले बैकस्लैश होना चाहिए।

/[^\-x00-\x7F]/n # So it would leave the dash alone 

आप रख दिया है '-' '\' और के बीच 'एक्स', जो अशक्त चरित्र के संदर्भ में टूट जाएगा, और इस तरह सीमा टूट गया।

+0

ओह प्रिय भगवान ... कृपया मुझे माफ़ कर दो :) धन्यवाद! – Ivan

+0

हाँ, हम सभी को टाइपो के सबसे सरल कारणों से भ्रमित भ्रम का एक कठिन भार था! – bobince

+1

रिक्त स्थान के बारे में क्या? यह सफेद रिक्त स्थान संरक्षित नहीं है। –

2

यह iconv के रूप में के रूप में साफ नहीं है, लेकिन मैं क्या लगता है कि आप चाहते हैं करता है:

http://snippets.dzone.com/posts/show/2384

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