RegExp के साथ सभी विशेष वर्ण निकालें


234

मैं एक RegExp चाहूंगा जो एक स्ट्रिंग से सभी विशेष वर्णों को हटा देगा। मैं कुछ इस तरह की कोशिश कर रहा हूँ, लेकिन यह IE7 में काम नहीं करता है, हालाँकि यह फ़ायरफ़ॉक्स में काम करता है।

var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";

for (var i = 0; i < specialChars.length; i++) {
  stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}

RegExp का विस्तृत विवरण सहायक होगा।


18
ऐसा कुछ श्वेत-सूची के रूप में बेहतर होगा, न कि एक काली सूची में। तब आप बस [az] | [0-9] | \ s
एप-इनैगो just

कोई स्क्रिप्ट त्रुटि? आपने डेब्यू किया? या फिर एक और प्रयास करें ... जावास्क्रिप्ट कोड में ब्लॉक को पकड़ें।
कंचन

@ एप-इनोगो कृपया आप मुझे RegExp को थोड़ा और समझा सकते हैं कृपया
टिमोथी रुहेले

3
कृपया "विशेष चरित्र" को परिभाषित करें! क्या "special" आपके लिए खास है? (इस बारे में सोच आप @ एप-iango के बिंदु दिखाई देंगे।)
deceze

7
मुझे नहीं लगता कि यहां किसी को कोई अपराध करना चाहिए। मैं एक ब्लैकलिस्ट के रूप में करने से पहले जल गया हूं क्योंकि हमेशा से उन "गोचचा" हैं जो अंत में हो रहे हैं (जैसे कि धोखे के उदाहरण)। अंततः सही दृष्टिकोण इस बारे में अधिक है कि आप ऐसा करने की कोशिश क्यों कर रहे हैं।
एपे-इनोगो

जवाबों:


612
var desired = stringToReplace.replace(/[^\w\s]/gi, '')

जैसा कि टिप्पणियों में उल्लेख किया गया था कि यह एक श्वेतसूची के रूप में करना आसान है - उन पात्रों को बदलें जो आपके सफारी में नहीं हैं

कैरेट ( ^) वर्ण सेट का निषेध है [...], giवैश्विक और मामले को असंवेदनशील कहें (उत्तरार्द्ध थोड़ा बेमानी है, लेकिन मैं इसका उल्लेख करना चाहता था) और इस उदाहरण में सेफेलिस्ट अंक, शब्द वर्ण, अंडरस्कोर ( \w) और व्हाट्सएप (है) \s)।


50
यह समाधान गैर अंग्रेजी प्रतीकों के लिए काम नहीं करता है। उदाहरण के लिए ""жак"।
सीगल

4
आप ^ \ w के बजाय अपरकेस \ W का उपयोग भी कर सकते हैं। \ W: किसी भी गैर-शब्द वर्ण से मेल खाता है। [^ A-Za-z0-9_] के बराबर। developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…
delkant

@Seagull मैंने एक उत्तर जोड़ा है जो यूनिकोड को संभालता है।
17

1
शब्दों को स्वीकार करने के लिए, जैसे कि पुर्तगाली भाषा में, ऐसा करें: stringToReplace.replace (/ [[A-z \-ú \ s] / gi, '')
alansiqueira27

1
अधिकांश यूरोपीय भाषाओं को जोड़ने के लिए (नॉर्वेजियन, स्वीडिक, जर्मन, पोर्टोगुइज़, स्पैनिश) stringToReplace.replace (/ [^ ^ \ w \ s \ xc0-xff] / gi, '')। अन्य भाषाओं को शामिल करने के लिए यूनिकोड श्रेणियों का उपयोग किया जा सकता है। देखें: stackoverflow.com/questions/150033/…
Eskil Mjelva Saatvedt

105

ध्यान दें कि यदि आप अभी भी एक सेट को बाहर करना चाहते हैं, जिसमें स्लैश और विशेष वर्ण जैसी चीजें शामिल हैं जो आप निम्नलिखित कर सकते हैं:

var outString = sourceString.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');

इस बात का विशेष ध्यान रखें कि "माइनस" वर्ण को भी शामिल करने के लिए, आपको बाद वाले समूह की तरह बैकस्लैश से बचकर निकलने की आवश्यकता है। यदि आप ऐसा नहीं करते हैं तो यह भी 0-9 का चयन करेगा जो संभवतः अवांछित है।


10
उत्कृष्ट समाधान! स्वीकृत उत्तर केवल अंग्रेजी में काम करता है, यह किसी भी भाषा (जहाँ तक मैंने जाँच की है) पर काम करता है। धन्यवाद :)
रोनेन नेस

1
@knutole ?चरित्र सेट भाग से सामने की ओर हटा दें । यह उन वर्णों को सूचीबद्ध करता है जिन्हें आप हटाना चाहते हैं, इसलिए इसे छीन लिए जाने से स्वाभाविक रूप से इसे अंतिम परिणाम में शामिल किया जाएगा।
noinput

यह बहुत अच्छा काम करता है, किसी भी भाषा के लिए पूरी तरह से फिट बैठता है, बस उस चार को जोड़ने की ज़रूरत है जिसे आप बदलना चाहते हैं और यह सब है। धन्यवाद।
एलरोस रोमियो

21

सादा जावास्क्रिप्ट regex यूनिकोड अक्षरों को संभालता नहीं है

प्रयोग नहीं करें [^\w\s] , इससे अक्षरों को हटा दिया जाएगा (जैसे कि), सिरिलिक या चीनी का उल्लेख नहीं करने के लिए, ऐसी भाषाओं से आने वाले पत्रों को हटा दिया जाएगा।

आप वास्तव में सभी विशेष वर्णों के साथ इन पत्रों को हटाना नहीं चाहते हैं। आपके पास दो मौके हैं:

  • अपने regex में उन सभी विशेष वर्णों को जोड़ें जिन्हें आप हटाना नहीं चाहते हैं,
    उदाहरण के लिए [^èéòàùì\w\s]:।
  • Xregexp.com पर एक नजर है । XRegExp \p{...}सिंटैक्स के माध्यम से यूनिकोड मिलान के लिए आधार समर्थन जोड़ता है ।

var str = "Їжак::: résd,$%& adùf"
var search = XRegExp('([^?<first>\\pL ]+)');
var res = XRegExp.replace(str, search, '',"all");

console.log(res); // returns "Їжак::: resd,adf"
console.log(str.replace(/[^\w\s]/gi, '') ); // returns " rsd adf"
console.log(str.replace(/[^\wèéòàùì\s]/gi, '') ); // returns " résd adùf"
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js"></script>


3
अंतर्राष्ट्रीयकरण के लिए अच्छा है, मुझे नहीं पता था कि जेएस रेगेक्स यूटीएफ -8 के दिमाग में नहीं था।
लेसिक्यूसर

आप सभी मान्य UTF-8 अक्षरों को var str
Seagull

@Seagull हाँ, लेकिन यदि आप विश्व व्यापी संगत एप्लिकेशन नहीं लिख रहे हैं, तो आप व्यावहारिक रूप से अपने वर्तमान स्थानीयकरणों के लिए केवल मान्य UTF-8 अक्षरों की सूची डाल सकते हैं। मेरे मामले में, इतालवी भाषा के लिए केवल कुछ अक्षर हैं।
१३:५४

7

पहला समाधान किसी भी UTF-8 वर्णमाला के लिए काम नहीं करता है। (यह ажак जैसे पाठ को काट देगा)। मैं एक फ़ंक्शन बनाने में कामयाब रहा हूं जो RegExp का उपयोग नहीं करता है और जावास्क्रिप्ट इंजन में अच्छे UTF-8 समर्थन का उपयोग करता है। विचार सरल है अगर एक प्रतीक अपरकेस में बराबर है और लोअरकेस एक विशेष चरित्र है। एकमात्र अपवाद व्हॉट्सएप के लिए बनाया गया है।

function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

अद्यतन: कृपया ध्यान दें, यह समाधान केवल उन भाषाओं के लिए काम करता है जहां छोटे और बड़े अक्षर हैं। चीनी जैसी भाषाओं में, यह काम नहीं करेगा।

अद्यतन 2: मैं मूल समाधान के लिए आया था जब मैं एक फजी खोज पर काम कर रहा था। यदि आप खोज कार्यक्षमता को लागू करने के लिए विशेष वर्णों को निकालने का प्रयास कर रहे हैं, तो भी बेहतर तरीका है। किसी भी लिप्यंतरण लाइब्रेरी का उपयोग करें जो आपको केवल लैटिन वर्णों से स्ट्रिंग का उत्पादन करेगी और फिर सरल रेगेक्सप विशेष वर्णों को हटाने के सभी जादू करेगा। (यह चीनी के लिए भी काम करेगा और आप भी Tromsø== बनाकर साइड लाभ प्राप्त करेंगे Tromso)।


बहुत बढ़िया, इस जवाब की तरह! मैं इसे एक वैध फ़ाइल नाम बनाने के लिए उपयोग करता हूं और इसने आपके समाधान को रिक्त स्थान (लिनक्स / यूनिक्स संगत) को हटाने और संख्याओं को बढ़ाने की अनुमति दी है। इसलिए मैंने if स्टेटमेंट (jQuery शामिल) बढ़ाया: अगर (str [i]! == '' && (लोअर [i]! = अपर [i] || लोअर [i] .trim () === '' | | $ .isNumeric (str [i]))
जॉनी

कई भाषाओं में अपरकेस अक्षर नहीं हैं ... इसलिए फ़ंक्शन विशेष वर्णों के रूप में मान्य इनपुट पर विचार करेगा
यार लेवी

चीनी पात्र एक ऐसा उदाहरण है जो इस से अलग हो जाता है
lethek

जब मैंने यह समाधान बनाया, तो दुर्भाग्य से, मैं चीनी जैसी भाषाओं के बारे में नहीं सोच रहा था। समाधान प्रस्तावित किया जाना है, क्योंकि पिछले उत्तर भी काम नहीं करेंगे।
सीगल

1

मैं अपने regexes को डिबग करने के लिए RegexBuddy का उपयोग करता हूं इसमें लगभग सभी भाषाएँ बहुत उपयोगी हैं। लक्षित भाषा के लिए कॉपी / पेस्ट करें। भयानक उपकरण और बहुत महंगा नहीं है।

इसलिए मैं आपके रेगेक्स को कॉपी / पेस्ट करता हूं और आपका मुद्दा यह है कि [,] regex में विशेष पात्र हैं, इसलिए आपको उनसे बचने की आवश्यकता है। तो रेग्ज होना चाहिए:


0

आप ऐसा क्यों नहीं करते हैं:

re = /^[a-z0-9 ]$/i;
var isValid = re.test(yourInput);

यह देखने के लिए कि क्या आपके इनपुट में कोई विशेष चार्ट है या नहीं


17
ओपी का कहना है कि वह विशेष पात्रों को हटाने की कोशिश कर रहे हैं, यदि वे मौजूद नहीं हैं।
अन्नकूट

यह एक अच्छा समाधान है, लेकिन यह केवल अंग्रेजी वर्णमाला पत्र संख्या और स्थान की अनुमति देगा, लेकिन यह पात्रों को हटा देगा èéòàùìऔर कुछ मामलों में यह समाधान नहीं होगा
Mapmalith

0

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")मैंने ऐसा ही किया। लेकिन कुछ लोग हैं जिन्होंने इसे बहुत आसान कियाstr.replace(/\W_/g,"");


आपके दृष्टिकोण की अधिकांश चीजें बेमानी हैं, क्योंकि \Wइसमें कुछ पात्र हैं। लेकिन आप नंबर क्यों फ़िल्टर करेंगे? वे विशेष पात्र नहीं हैं।
user4642212
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.