2014-06-13 6 views
9

से शून्य WIDTH स्पेस (यूनिकोड 8203) हटाएं मैं कुछ जावास्क्रिप्ट लिख रहा हूं जो वेबसाइट सामग्री को संसाधित करता है। उपयोगकर्ता द्वारा बैकस्पेस दबाते समय टेक्स्ट में "शून्य चौड़ाई स्थान" वर्ण डालने के लिए SharePoint टेक्स्ट एडिटर की प्रवृत्ति से मेरे प्रयासों को विफल कर दिया जा रहा है। चरित्र का यूनिकोड मान 8203 है, या बी 200 हेक्साडेसिमल में है। मैंने इसे छुटकारा पाने के लिए डिफ़ॉल्ट "प्रतिस्थापन" फ़ंक्शन का उपयोग करने का प्रयास किया है। पर और आगेजावास्क्रिप्ट स्ट्रिंग

var a = "o​m"; //the invisible character is between o and m 

var b = a.replace(/\u8203/g,''); 
= a.replace(/\uB200/g,''); 
= a.replace("\\uB200",''); 

और इतने: मैं कई वेरिएंट की कोशिश की है, उनमें से कोई भी काम किया। मैंने इस विषय पर कुछ बदलावों की कोशिश की है। इन भाव काम (Chrome और Firefox में परीक्षण) केवल एक चीज है कि काम करता है अभिव्यक्ति में वास्तविक चरित्र लिख रहा है में से कोई भी:

var b = a.replace("​",''); //it's there, believe me 

यह संभावित समस्याओं बन गया है। चरित्र अदृश्य है ताकि लाइन में खुद को समझ में नहीं आता है। मैं टिप्पणियों के साथ उस के आसपास मिल सकता है। लेकिन अगर कोड का पुन: उपयोग किया जाता है, और फ़ाइल गैर-यूनिकोड एन्कोडिंग का उपयोग करके सहेजी जाती है, (या जब इसे SharePoint पर तैनात किया जाता है, तो गारंटी नहीं है कि यह एन्कोडिंग गड़बड़ नहीं करेगा) यह काम करना बंद कर देगा। क्या चरित्र के बजाए यूनिकोड नोटेशन का उपयोग करके इसे लिखने का कोई तरीका है?

[मेरे चरित्र के बारे में ramblings]

मामले में आप इस चरित्र नहीं मिले हैं, (और आप शायद नहीं है, को देखकर यह नग्न आंखों के लिए अदृश्य है के रूप में, जब तक यह अपने कोड को तोड़ दिया और आप की खोज की यह बग का पता लगाने की कोशिश करते समय) यह वास्तविक ए-होल है जो कुछ प्रकार के पैटर्न को खराब होने से मेल खाता है। मैंने आपके लिए जानवर को कैज किया है:

[] < - सावधान रहें, इसे बचने न दें।

यदि आप इसे देखना चाहते हैं, तो उन ब्रैकेट को एक टेक्स्ट एडिटर में कॉपी करें और फिर अपने कर्सर को उनके माध्यम से फिर से करें। आपको पता चलेगा कि आपको 2 अक्षरों की तरह दिखने के लिए तीन चरणों की आवश्यकता होगी, और आपका कर्सर मध्य में एक कदम छोड़ देगा।

उत्तर

17

एक यूनिकोड भागने में नंबर हेक्स में होना चाहिए, और 8203 के लिए हेक्स, 200B (जो वास्तव में एक Unicode zero-width space है) है, तो:

var b = a.replace(/\u200B/g,''); 

Live Example:

var a = "o​m"; //the invisible character is between o and m 
var b = a.replace(/\u200B/g,''); 
console.log("a.length = " + a.length);  // 3 
console.log("a === 'om'? " + (a === 'om')); // false 
console.log("b.length = " + b.length);  // 2 
console.log("b === 'om'? " + (b === 'om')); // true 
+0

धन्यवाद, आप एक जीवन रक्षक हो! – jaggedsoft

1

स्वीकार किए जाते हैं जवाब मेरे मामले के लिए काम नहीं किया था।

लेकिन यह एक किया:

text.replace(/(^[\s\u200b]*|[\s\u200b]*$)/g, '') 
संबंधित मुद्दे