var str="INFO] :谷���新道, ひば���ヶ丘2丁���, ひばりヶ���, 東久留米市 (Higashikurume)";
और मुझे स्ट्रिंग से सभी गैर-एससीआई चरित्र को हटाने की आवश्यकता है,
इसका मतलब केवल str में "INFO] (हिगाशिकुरूम) है;"
जवाबों:
ASCII 0 से 127 की सीमा में है, इसलिए:
str.replace(/[^\x00-\x7F]/g, "");
इसे हटाने के सकारात्मक दावे के साथ भी किया जा सकता है:
textContent = textContent.replace(/[\u{0080}-\u{FFFF}]/gu,"");
यह यूनिकोड का उपयोग करता है। जावास्क्रिप्ट में, जब एक नियमित अभिव्यक्ति के लिए यूनिकोड व्यक्त किया जाता है, तो वर्णों को भागने के क्रम के साथ निर्दिष्ट किया जाता है, \u{xxxx}
लेकिन झंडा भी 'u'
मौजूद होना चाहिए; ध्यान दें कि रेग्ज में झंडे हैं 'gu'
।
मैंने इसे "निष्कासन का सकारात्मक अभिकथन" इस अर्थ में कहा कि एक "धनात्मक" अभिकथन व्यक्त करता है कि कौन से वर्णों को हटाना है, जबकि एक "नकारात्मक" अभिकथन को व्यक्त करता है कि कौन से अक्षरों को नहीं हटाना है। कई संदर्भों में, नकारात्मक अभिकथन, जैसा कि पूर्व उत्तरों में कहा गया है, पाठक के लिए अधिक विचारोत्तेजक हो सकता है। परिधि " ^
" कहती है "नहीं" और सीमा \x00-\x7F
कहती है "अस्की," इसलिए दोनों एक साथ कहते हैं "अस्की नहीं।"
textContent = textContent.replace(/[^\x00-\x7F]/g,"");
यह अंग्रेजी भाषा बोलने वालों के लिए एक बढ़िया समाधान है जो केवल अंग्रेजी भाषा की परवाह करते हैं, और इसका मूल प्रश्न के लिए एक अच्छा जवाब भी है। लेकिन एक अधिक सामान्य संदर्भ में, कोई भी यह मानने के सांस्कृतिक पूर्वाग्रह को स्वीकार नहीं कर सकता है कि "सभी गैर-अस्की बुरी है।" ऐसे संदर्भों के लिए जहां गैर-असिसी का उपयोग किया जाता है, लेकिन कभी-कभी इसे बाहर निकालने की आवश्यकता होती है, यूनिकोड का सकारात्मक जोर एक बेहतर फिट है।
एक अच्छा संकेत है कि शून्य-चौड़ाई, गैर मुद्रण वर्ण एक स्ट्रिंग में एम्बेडेड हैं, जब स्ट्रिंग की "लंबाई" संपत्ति सकारात्मक (नॉनज़रो) है, लेकिन ऐसा लगता है (जैसे कि प्रिंट) एक खाली स्ट्रिंग। उदाहरण के लिए, "टेक्स्ट कॉन्टेंट" नामक एक चर के लिए, मैंने क्रोम डीबगर में यह दिखाया था:
> textContent
""
> textContent.length
7
इसने मुझे यह देखने के लिए प्रेरित किया कि उस तार में क्या था।
> encodeURI(textContent)
"%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B"
बाइट्स का यह क्रम कुछ यूनिकोड वर्णों के परिवार में लगता है जो दस्तावेजों में वर्ड प्रोसेसर द्वारा डाले जाते हैं, और फिर डेटा फ़ील्ड में अपना रास्ता खोजते हैं। आमतौर पर, ये प्रतीक किसी दस्तावेज़ के अंत में होते हैं। शून्य-चौड़ाई-स्थान "%E2%80%8B"
CK-Editor (CKEditor) द्वारा डाला जा सकता है।
encodeURI() UTF-8 Unicode html Meaning
----------- -------- ------- ------- -------------------
"%E2%80%8B" EC 80 8B U 200B ​ zero-width-space
"%E2%80%8E" EC 80 8E U 200E ‎ left-to-right-mark
"%E2%80%8F" EC 80 8F U 200F ‏ right-to-left-mark
उन पर कुछ संदर्भ:
http://www.fileformat.info/info/unicode/char/200B/index.htm
https://en.wikipedia.org/wiki/Left-to-right_mark
ध्यान दें कि हालांकि एम्बेडेड वर्ण की एन्कोडिंग UTF-8 है, नियमित अभिव्यक्ति में एन्कोडिंग नहीं है। यद्यपि यह चरित्र UTF-8 के तीन बाइट्स (मेरे मामले में) के रूप में स्ट्रिंग में एम्बेडेड है, नियमित अभिव्यक्ति में दिए गए निर्देशों में दो-बाइट यूनिकोड का उपयोग करना चाहिए। वास्तव में, UTF-8 चार बाइट्स तक लंबा हो सकता है; यह यूनिकोड की तुलना में कम कॉम्पैक्ट है क्योंकि यह मानक एससीआई एन्कोडिंग से बचने के लिए उच्च बिट (या बिट्स) का उपयोग करता है। यह यहाँ समझाया गया है:
textContent = textContent.replace(/[\u{0080}-\u{FFFF}]/gu,"");
IE (कम से कम IE 11) में काम नहीं करता है। यह त्रुटि के साथ विफल रहता है: SCRIPT5021 : चरित्र सेट में अमान्य श्रेणी
आप गैर-ASCII वर्णों को बदलने के लिए निम्न regex का उपयोग कर सकते हैं
str = str.replace(/[^A-Za-z 0-9 \.,\?""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*/g, '')
हालांकि, ध्यान दें कि रिक्त स्थान, कॉलोन और अल्पविराम सभी मान्य ASCII हैं, इसलिए परिणाम होगा
> str
"INFO] :, , , (Higashikurume)"
[]
किसी भी वर्ण में [^]
होता है लेकिन विपरीत में - किसी भी वर्ण को कोष्ठक में नहीं मिलाता है ।
इनमें से कोई भी जवाब ठीक से टैब, न्यूलाइन्स, कैरिज रिटर्न, और कुछ नहीं बढ़ाए गए ASCII और यूनिकोड को संभालते हैं। यह KEEP टैब और नई कथानक होगा, लेकिन ASCII सेट से नियंत्रण वर्ण और कुछ भी हटा देगा। परीक्षण करने के लिए "इस कोड स्निपेट को चलाएँ" बटन पर क्लिक करें। भविष्य में (2020+?) पाइप के नीचे कुछ नई जावास्क्रिप्ट आने वाली है, \u{FFFFF}
लेकिन आपको अभी तक ऐसा नहीं करना है
console.log("line 1\nline2 \n\ttabbed\nF̸̡̢͓̳̜̪̟̳̠̻̖͐̂̍̅̔̂͋͂͐l̸̢̹̣̤̙͚̱͓̖̹̻̣͇͗͂̃̈͝a̸̢̡̬͕͕̰̖͍̮̪̬̍̏̎̕͘ͅv̸̢̛̠̟̄̿i̵̮͌̑ǫ̶̖͓͎̝͈̰̹̫͚͓̠̜̓̈́̇̆̑͜ͅ".replace(/[\x00-\x08\x0E-\x1F\x7F-\uFFFF]/g, ''))
एक्सेंट के साथ ASCII का उपयोग करने के लिए:
var str = str.replace(/[^\x00-\xFF]/g, "");