मैं एक स्ट्रिंग से गैर अल्फ़ान्यूमेरिक वर्ण कैसे छीन सकता हूं और रिक्त स्थान रख सकता हूं?


98

मैं एक रेगीक्स बनाना चाहता हूं जो सभी गैर-अल्फ़ान्यूमर वर्णों को हटा देता है, लेकिन रिक्त स्थान रखता है। यह db को हिट करने से पहले खोज इनपुट को साफ़ करना है। यहाँ मेरे पास अभी तक क्या है:

@search_query = @search_query.gsub(/[^0-9a-z]/i, '')

यहाँ समस्या यह है कि यह सभी स्थानों को हटा देता है। रिक्त स्थान को बनाए रखने के लिए समाधान?


मैं रेल का विकास नहीं करता, लेकिन आप रेल को स्वच्छता क्यों नहीं कर सकते?
एंड्रयू ग्रिम

जवाबों:


187

नकारात्मक वर्ण समूह में स्थान जोड़ें:

@search_query = @search_query.gsub(/[^0-9a-z ]/i, '')

4
खाली स्थान मेरे लिए काम नहीं करता था, इसलिए '\' भी एक विकल्प हो सकता है: @ search_query.gsub (/ [0-9a-z \\ s] / i, '')
डेविड डगलस

6
थोड़ा कम @search_query.gsub!(/[^0-9a-z ]/i, '')
कीड़ा

3
बस सटीक रूप से, यह सभी उच्चारण पत्रों को हटा देता है और कुछ भाषाओं के अनुकूल नहीं हो सकता है।
उलबेब

@DavidDouglas वह \sनहीं होना चाहिए\\s
डेक्स

9

इस मामले में मैं धमाके विधि (gsub के बजाय gsub) का उपयोग करेगा ताकि इनपुट को स्थायी रूप से साफ किया जा सके।

#permanently filter all non-alphanumeric characters, except _
@search_query.gsub!(/\W/,'')

यह एक ऐसी स्थिति से बचा जाता है जहां @seach_query को कोड में कहीं और साफ किए बिना उपयोग किया जाता है।


2
अगर कुछ भी मिलान नहीं किया गया तो धमाकेदार संस्करण शून्य वापस आ जाएगा। संभवतः वह परिणाम नहीं है जो आप चाहते हैं या अपेक्षा करते हैं। डॉक्स से "स्ट्रिंग # gsub के स्थानापन्न को करता है, वापस लौटता है, या यदि कोई प्रतिस्थापन नहीं किया गया है तो शून्य करता है। यदि कोई ब्लॉक और कोई प्रतिस्थापन नहीं दिया जाता है, तो एक एन्यूमरेटर बदले में लौटाया जाता है।"
dft

2
उनके उदाहरण में रिटर्न वैल्यू का उपयोग नहीं किया गया है, इसलिए यह बहुत अप्रासंगिक है।
जाप हागमंस

3

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

@search_query.scan(/[\da-z\s]/i).join

0

शायद यह ऐसे मामले के लिए काम करेगा:

# do not replace any word characters and spaces
@search_query = @search_query.gsub(/[^\w ]/g, '')

-3

एक बेहतर जवाब (कम से कम माणिक में है):

@search_query.gsub!(/^(\w|\s*)/,'')

1
यह स्ट्रिंग की शुरुआत से या तो (ए) एकल शब्द चरित्र या (बी) व्हाट्सएप की किसी भी संख्या को हटाने जा रहा है। सवाल से पूरी तरह से असंबंधित, और इसलिए एक जवाब नहीं है।
सिगी

2
एक बड़ी गलती की .. पता नहीं मैं क्या सोच रहा था: = (
जॉन डो ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.