2009-03-18 11 views
256

मुझे एक स्ट्रिंग से सभी वर्णों को हटाने की आवश्यकता है जो a-z A-Z 0-9 में नहीं हैं या रिक्त स्थान नहीं हैं।गैर-अल्फान्यूमेरिक वर्णों को कैसे निकालें?

क्या किसी के पास ऐसा करने का कोई कार्य है?

उत्तर

548

लगता है जैसे आप जानते थे कि आप पहले से क्या करना चाहते थे, आप मूल रूप से इसे रेगेक्स के रूप में परिभाषित करते हैं।

preg_replace("/[^A-Za-z0-9 ]/", '', $string); 
+8

zuk1: regexbuddy कि – relipse

+1

के साथ एक बहुत मदद यहाँ एक उदाहरण है अगर आप एक की अनुमति दी चरित्र के रूप में हाइफन शामिल करना चाहते है। मुझे इसकी आवश्यकता थी क्योंकि मुझे ईमेल पते के आधार पर मूडल उपयोगकर्ता नाम से अस्वीकृत पात्रों को अलग करने की आवश्यकता थी: preg_replace ("/ [^ a-z0-9 _। @ \ -] /", '' $ string); –

+1

क्या यह उद्धरण चिह्न (डबल-कोट्स) के बजाय, नियमित अभिव्यक्ति के आस-पास एस्ट्रोफ़ेस (सिंगल-कोट्स) के साथ बिल्कुल वही काम करेगा? उदा।: Preg_replace ('/ [^ ए-ज़ा-जे 0-9] /', '', $ स्ट्रिंग); ' – jtheletter

39

Regular expression आपका उत्तर है।

$str = preg_replace('/[^a-z\d ]/i', '', $str); 
  • केस संवेदी लिए i खड़ा है।
  • ^ का मतलब है, शुरू नहीं होता है।
  • \d किसी भी अंक से मेल खाता है।
  • a-za और z के बीच सभी वर्णों से मेल खाता है। i पैरामीटर के कारण आपको a-z और A-Z निर्दिष्ट करने की आवश्यकता नहीं है।
  • \d के बाद एक जगह है, इसलिए इस रेगेक्स में रिक्त स्थान की अनुमति है।
+3

पसंद नहीं करता है हम इस बारे में स्पष्टीकरण चाहते हैं :)। लोग यहां देखने के लिए आते हैं कि यह क्यों है। कृपया रेगेक्स स्पष्टीकरण पर भी विचार करें! स्पष्टीकरण के बिना आपने जो लिखा है उसे जानने के लिए हर कोई पर्याप्त उन्नत नहीं है। धन्यवाद –

+0

@PratikCJoshi मैं मामले असंवेदनशील के लिए खड़ा है।^मतलब है, साथ शुरू नहीं होता है। \ डी किसी भी अंक से मेल खाता है। ए-जेड ए और जेड के बीच सभी पात्रों से मेल खाता है। I पैरामीटर के कारण आपको ए-जेड और ए-जेड निर्दिष्ट करने की आवश्यकता नहीं है। \ N वहां एक जगह है, इसलिए इस रेगेक्स में रिक्त स्थान की अनुमति है। – bart

+1

लोग ** टिप्पणियों को उत्तर के रूप में नहीं पढ़ते हैं। कृपया उत्तर अपडेट करें! –

123

यूनिकोड वर्ण के लिए, यह है:

preg_replace("/[^[:alnum:][:space:]]/u", '', $string); 
+6

अब, यह असली जवाब है! +1 – CrisDeBlonde

+0

हाय वॉन्डो,/ui चीज़ के साथ क्या है .. आप इसे क्या कहते हैं? क्या कोई मुझे कुछ प्रकाश छोड़ सकता है। धन्यवाद। – kebyang

+8

यू: यूनिकोड, i: केस असंवेदनशील – voondo

14

है कि यहाँ के लिए एक बहुत सरल regex है:

\W|_ 

और जैसा कि आप इसकी आवश्यकता है (एक आगे / स्लेश सीमांकक के साथ) का इस्तेमाल किया।

preg_replace("/\W|_/", '', $string); 

टेस्ट इसे यहाँ इस महान उपकरण के साथ बताते हैं कि क्या regex कर रही है:

http://www.regexr.com/

+1

आपको अभी भी '/ u' ध्वज की आवश्यकता है अन्यथा गैर-असीसी अक्षरों को भी हटा दिया गया है। – Xeoncross

+0

वह वेबसाइट अद्भुत है। अच्छा संसाधन! –

+0

नीट [लेकिन रिक्त स्थान से भी मेल खाता है] (https://www.regex101.com/r/afwxAB/1) और यदि यह वांछित है, तो शायद * * वर्ण वर्ग * और अतिरिक्त * क्वांटिफ़ायर * के उपयोग से प्रदर्शन को दोगुना कर सकता है * * एक या अधिक * ['[\ W_] +'] (https://www.regex101.com/r/afwxAB/2) –

-8

मैं इस का उपयोग करें:

//to remove non english character 
$str = preg_replace('/[^\00-\255]+/u', '', $str); 
+8

यह सभी प्रकार के गलत है। यह ऐसा कुछ नहीं कर रहा है जैसा आपको लगता है कि यह कर रहा है। वे ऑक्टल हैं। ऑक्टल 255 वास्तव में 173 दशमलव या 0xAD हेक्स है। आपने जो लिखा है वह '[^ \ x00- \ xAD]' के बराबर है, जहां 0xAD सॉफ़्ट हाइपेन के लिए कोड पॉइंट है। भले ही आप यह सही कर रहे थे, '[^ \ x00- \ xFF]' पूरी तरह से बकवास और गलत है। – tchrist

+2

हालांकि कोड की सराहना की जाती है, यह हमेशा एक साथ स्पष्टीकरण होना चाहिए। यह लंबे समय तक नहीं होना चाहिए लेकिन इसकी उम्मीद है। – peterh

0

मैं जवाब के लिए भी देख रहा था और मेरा इरादा हर गैर-अल्फा को साफ करना था और वहां एक से अधिक जगह नहीं होनी चाहिए।
तो, मैं यह करने के लिए एलेक्स के जवाब संशोधित है, और इस के लिए मुझे preg_replace('/[^a-z|\s+]+/i', ' ', $name)
regex ऊपर कर दिया sy8ed sirajul7_islamsy ed sirajul islam
को स्पष्टीकरण काम कर रहा है: रेगुलर एक्सप्रेशन मामले असंवेदनशील में z करने के लिए एक से किसी भी की जाँच करेगा रास्ता या एक से अधिक सफेद रिक्त स्थान, और इसे एक ही स्थान में परिवर्तित कर दिया जाएगा।

1
preg_replace("/\W+/", '', $string) 

आप इसे यहाँ का परीक्षण कर सकते हैं: http://regexr.com/

+0

प्रति @ एलेक्स स्टीवंस उत्तर, यह अंडरस्कोर "_" को पकड़ नहीं लेता है। –

1
[\W_]+ 

$string = preg_replace("/[\W_]+/u", '', $string); 

यह सब A-Z, एक-z, 0-9 नहीं चुन सकते हैं और इसे हटा दें।

यहाँ उदाहरण देखें: https://regexr.com/3h1rj

+0

यह regex/[\ W _] +/u का क्या अर्थ है? –

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