2016-03-08 17 views
12

निम्नलिखित फ़ायरफ़ॉक्स में 0 देता है। हालांकि यह क्रोम में -1 देता है।क्रोम बनाम फ़ायरफ़ॉक्स में ToLowerCase

var index = "İSTANBUL".toLowerCase().indexOf("is"); 
console.log(index); 

https://jsfiddle.net/81f0yr8w/1/

क्रोम एक अतिरिक्त चरित्र डालता है जब कम आवरण İ

"İ".toLocaleLowerCase().length 
>2 

(लैटिन राजधानी के ऊपर "\ u0130" एक बिंदु के साथ पत्र i) यह एक सामान्य व्यवहार है?

+1

वास्तव में कुछ अजीब हो रहा है। क्रोम में: '" इस्तांबुल "। लम्बाई === 8' और' "इस्तांबुल" .toLowerCase() लंबाई === 9'। यह एक छिपे हुए चरित्र को जोड़ता है। – Halcyon

+4

"इस्तांबुल" .toLowerCase()। CharCodeAt (1) === 775 लेकिन "İ" और "i" दो बहुत अलग वर्ण हैं। जब कम किया गया है तो पहले के पास एक संयोजन बिंदु है। (http://www.fileformat.info/info/unicode/char/0307/index.htm) –

उत्तर

3

आप पहले स्ट्रिंग को एन्कोड कर सकते हैं और इसकी तुलना करें। यह फ़ायरफ़ॉक्स और क्रोम में एक ही परिणाम देगा।

// 0 Chrome // 0 Firefox 
encodeURIComponent("İSTANBUL".toLowerCase()).indexOf(encodeURIComponent("İS".toLowerCase())) 

तथ्य यह है कि फ़ायरफ़ॉक्स और क्रोम इसे अलग-अलग संभालते हैं। लेकिन अजीब को w3c spec द्वारा परिभाषित किया गया है: https://www.w3.org/TR/charmod-norm/#matchingAlgorithm fwiw, आपको पहले स्ट्रिंग को कम करना होगा और फिर इसे एन्कोड करना होगा। वे तब तक मेल नहीं खाएंगे जब तक कि वे पहले एक ही मामले में न हों।

मिले [812,837] की Firefox Bug और चिह्नित डुप्लिकेट। (https://bugzilla.mozilla.org/show_bug.cgi?id=812837) 2011 में इसकी सूचना मिली थी और यह अभी भी खुला है। तो मुझे लगता है कि यह प्राथमिकता नहीं है।

+0

"इस्तांबुल" .toLowerCase()। indexOf ("İS" .toLowerCase()) मुझे शून्य भी देता है। EncodeUriComponent की कोई ज़रूरत नहीं है, मुझे अपने वास्तविक कोड में अतिरिक्त प्रतिस्थापन जोड़ने की आवश्यकता है जैसे I के साथ iİ को बदलना :) लेकिन यह मामला अजीब है ... – cgon

+0

हाँ, अच्छा लगता है btw – Shanimal

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