जावास्क्रिप्ट में स्ट्रिंग से सभी गैर-संख्यात्मक वर्णों को पट्टी करें


701

एक गैर-डोम परिदृश्य पर विचार करें जहां आप जावास्क्रिप्ट / ECMAScript का उपयोग करके सभी गैर-संख्यात्मक वर्ण स्ट्रिंग से निकालना चाहते हैं। कोई भी वर्ण जो सीमा में 0 - 9है उसे रखा जाना चाहिए।

var myString = 'abc123.8<blah>';

//desired output is 1238

आप इसे सादे जावास्क्रिप्ट में कैसे प्राप्त करेंगे? कृपया याद रखें कि यह एक गैर-डोम परिदृश्य है, इसलिए jQuery और अन्य समाधान जिसमें ब्राउज़र और कीप इवेंट शामिल हैं, उपयुक्त नहीं हैं।

जवाबों:


1431

स्ट्रिंग की .replaceविधि का उपयोग regex के साथ करें \D, जो एक शॉर्टहैंड कैरेक्टर क्लास है जो सभी गैर-अंकों से मेल खाता है:

myString = myString.replace(/\D/g,'');

5
धन्यवाद csj; कहीं भी और अधिक जानकारी प्राप्त करने के लिए \D?
पी। काम्पबेल

34
यह मेरा डिफ़ॉल्ट रेगेक्स संदर्भ है: regular-expressions.info/reference.html प्रत्येक अंतर्निहित अंतर्निर्मित वर्ण वर्ग में बराबरी के वर्ण हैं। \ d \ D (अंक बनाम सब कुछ लेकिन अंक) \ w \ W (शब्द वर्णक बनाम सब कुछ लेकिन शब्द अक्षर) \
_

3
बस स्पष्ट होने के लिए, यहाँ प्रतिस्थापित करने के लिए वाक्यविन्यास है: w3schools.com/jsref/jsref_obj_regexp.asp क्योंकि फ़ॉरवर्ड स्लैश और "g" उस आदेश का हिस्सा हैं, RegEx का हिस्सा नहीं हैं।
माइक के।

replaceसभी ब्राउज़रों में इस सटीक सिंटैक्स के साथ काम करता है? ऐसा लगता है जैसे मुझे object has no method 'replace' आईई के पुराने संस्करण में एक याद रखना याद है जब पाठ के साथ इसका उपयोग मैंने jQuery के साथ पकड़ा ... या ऐसा कुछ।
cwd

@cwd मुझे पता नहीं है कि पिछले या वर्तमान ब्राउज़रों में क्या समर्थित है। प्रश्न में एक गैर-डोम संदर्भ निर्दिष्ट किया गया है, इसलिए यह संभावना है कि पोस्टर एक गैर वेब ब्राउज़र वातावरण में स्क्रिप्टिंग कर रहा था।
सीएसजे

354

यदि आपको फ्लोट नंबरों के लिए डॉट छोड़ने के लिए इसकी आवश्यकता है, तो इसका उपयोग करें

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"

6
कोई regexp विशेषज्ञ? इसे कैसे बनाया जाए (केवल संख्या के साथ बहुत ही प्रासंगिक)। धन्यवाद!
कास्परनी

1
आपका मतलब क्या है? इनपुट और आउटपुट का उदाहरण दें
max4ever

2
अच्छा नहीं है: "aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.किसी स्ट्रिंग को स्ट्रिप करना चाहिए जो एक नंबर को घेर सकती है ..
vsync

2
@ max4ever आपने मेरी जान बचाई, हैंडलिंग के लिए धन्यवाद -(निगेटिव) नंबर केस :)
पंकज पारकर

4
@ कास्परि शायद:parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
ए। १

50

यदि आपकी स्क्रिप्ट कार्यान्वयन उनका समर्थन करती है, तो एक नियमित अभिव्यक्ति का उपयोग करें। कुछ इस तरह:

myString.replace(/[^0-9]/g, '');

12
किसी कारण से यह तरीका बहुत अधिक पठनीय लगता है [^ \ d]।
अरमान बिमातोव

1
Regex सीमांकक के बाद के लिए g क्या है ??
मूल निवासी कोडर


23

आप सभी गैर-अंकीय वर्णों को बदलने के लिए RegExp का उपयोग कर सकते हैं :

var myString = 'abc123.8<blah>';
myString = myString.replace(/[^\d]/g, ''); // 1238

22

की तर्ज पर कुछ:

yourString = yourString.replace ( /[^0-9]/g, '' );

10
मूल प्रश्न का उत्तर नहीं, बल्कि दशमलव बिंदु को संभालने के लिए एक संस्करण:yourString = yourString.replace ( /[^0-9.]/g, '' );
मैक्सिम माई


0

कोणीय / ईओण / वीयूजेएस में - मैं सिर्फ एक सरल विधि के साथ आया:

stripNaN(txt: any) {
    return txt.toString().replace(/[^a-zA-Z0-9]/g, "");
}

दृश्य पर उपयोग:

<a [href]="'tel:'+stripNaN(single.meta['phone'])" [innerHTML]="stripNaN(single.meta['phone'])"></a>

0

दुर्भाग्य से ऊपर दिए गए किसी भी उत्तर ने मेरे लिए काम नहीं किया।

मैं दशमलव सूचक सहित मुझे एक नंबर आउटपुट देने के लिए मुद्रा संख्या को $123,232,122.11(1232332122.11) या USD 123,122.892(123122.892) या ₹ 98,79,112.50(9879112.5) जैसी किसी भी मुद्रा से परिवर्तित करना चाह रहा था ।

अपना खुद का रेक्सक्स बनाना था जो कुछ इस तरह दिखता है:

str = str.match(/\d|\./g).join('');

0

सभी गैर-संख्यात्मक वर्णों को हटाने के लिए लघु कार्य, लेकिन दशमलव को रखें (और संख्या वापस करें):

parseNum = str => +str.replace(/[^.\d]/g, '');
let str = 'a1b2c.d3e';
console.log(parseNum(str));


-5

हम 2017 में हैं अब आप ES2016 का भी उपयोग कर सकते हैं

var a = 'abc123.8<blah>';
console.log([...a].filter( e => isFinite(e)).join(''));

या

console.log([...'abc123.8<blah>'].filter( e => isFinite(e)).join(''));  

परिणाम है

1238

12
इस ऑपरेशन के बारे में जाने के लिए यह एक बहुत ही अक्षम तरीका है।
djheru

यहाँ क्या अक्षम या बुरा है?
व्लादिस्लाव कोस्टेंको

5
यह स्ट्रिंग को एकल-वर्ण स्ट्रिंग्स के एक अतिरिक्त विधि के माध्यम से एक सरणी में परिवर्तित करता है, और फिर प्रत्येक सरणी आइटम पर जावास्क्रिप्ट पर फ़िल्टर फ़ंक्शन लागू करता है, एक नया स्ट्रिंग सरणी लौटाता है, अंत में उस सरणी को वापस स्ट्रिंग में शामिल करने के लिए। रेगेक्स एक स्ट्रिंग लेता है और एक स्ट्रिंग लौटाता है और प्रसंस्करण देशी कोड के माध्यम से किया जाता है।
शॉर्टफ्यूज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.