2009-04-10 25 views
44

मैं कुछ अवांछित पात्रों को हटाने के लिए रूबी और रेगेक्स के साथ अभ्यास कर रहा हूं। उदाहरण के लिए:मैं विशेष वर्ण कैसे हटा सकता हूं?

input = input.gsub(/<\/?[^>]*>/, '') 

और के लिए विशेष वर्ण, उदाहरण के ☻ या ™:

input = input.gsub('&#', '') 

यह केवल संख्या छोड़ देता है, ठीक है। लेकिन यह केवल काम करता है उपयोगकर्ता, एक कोड के रूप में विशेष वर्ण में प्रवेश करती है, तो इस तरह:

&#153; 

मेरा प्रश्न: उपयोगकर्ता, कोड के बिना विशेष वर्ण में प्रवेश करती है, तो इस तरह मैं कैसे विशेष वर्ण को नष्ट कर सकते हैं:

™ ☻ 

उत्तर

104

सबसे पहले, मुझे लगता है कि "सही इनपुट" का गठन करने और बाकी सब कुछ हटाने के लिए यह आसान हो सकता है। उदाहरण के लिए:

input = input.gsub(/[^0-9A-Za-z]/, '') 

हैं कि आप क्या चाहते हैं (आप गैर-लैटिन अक्षर, आदि का समर्थन करना चाहते हैं) नहीं है, तो मुझे लगता है कि आप ग्लिफ़ आप निकालना (जैसे ™ या चाहते हैं की एक सूची बनाना चाहिए ☻), और उन्हें एक-एक करके हटा दें, क्योंकि चीनी, अरबी, आदि चरित्र और प्रोग्रामेटिक रूप से एक चित्रकला के बीच अंतर करना मुश्किल है।

अंत में, आप एचटीएमएल से बचने के अनुक्रमों में या परिवर्तित करके अपने इनपुट को सामान्य बनाना चाहते हैं।

+0

धन्यवाद, मुझे लगता है कि अनुमत वर्णों की सूची बनाना आसान है। – Yud

+0

धन्यवाद !! मैंने स्ट्रिंग को रखने के लिए 'input = input.gsub (/ [^ 0-9A-Za-z] /, '' '' का उपयोग किया है। यह मुझे इन विशेष वर्णों के स्थान पर कुछ अतिरिक्त जगह देता है। – Surya

8

आप इस तरह सभी पात्रों आप चाहते हैं मिलान कर सकते हैं, और फिर उन्हें एक साथ शामिल,:

original = "aøbæcå" 
stripped = original.scan(/[a-zA-Z]/).to_s 
puts stripped 

जो आउटपुट "abc"

10

तुम सिर्फ ASCII वर्ण चाहता था, तो आप उपयोग कर सकते हैं:

original = "aøbauhrhræoeuacå" 
cleaned = "" 
original.each_byte { |x| cleaned << x unless x > 127 } 
cleaned # => "abauhrhroeuac" 
7

आप parameterize उपयोग कर सकते हैं:

'@!#$%^&*()111'.parameterize 
=> "111" 
+0

कृपया अपना कोड कैसे संपादित करें और यह ओपी की समस्या को हल करने का स्पष्टीकरण जोड़ने के लिए अपना उत्तर संपादित करें। कई SO पोस्टर नए हैं और आपके द्वारा पोस्ट किए गए कोड को समझ नहीं पाएंगे। –

+0

वहां डॉक्टर: http://apidock.com/rails/String/parameterize –

+0

पैरामीटर के साथ गोटो: यह डैश छोड़ देता है। मैं इसके लिए खाते में 'कुछ-यहां' .underscore.parameterize का उपयोग करता हूं। – emptywalls

3

एक आसान तरीका यह कर सकते बर्क Güder जवाब द्वारा inspirated करना है:

विशेष वर्णों को हटाने के लिए:

input = input.gsub(/\W/, '') 

आदेश में शब्द पात्रों रखने के लिए:

input = input.scan(/\w/) 

अंत इनपुट पर एक ही है! इसे आजमाएं: http://rubular.com/

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