संशोधित उत्तर
यह काफी समय हो गया जब मैंने इस प्रश्न का उत्तर दिया। जबकि सांस्कृतिक मुद्दों को अभी भी सच है (और मुझे नहीं लगता कि वे कभी भी चले जाएंगे), ECMA-402 मानक के विकास ने मेरा मूल उत्तर ... पुराना (या अप्रचलित?) बनाया। !
var locale = 'en'; // that should be somehow detected and passed on to JS
var firstString = "I might be A different CASE";
var secondString = "i might be a different case";
if (firstString.localeCompare(secondString, locale, {sensitivity: 'accent'}) === 0) {
// do something when equal
}
यह दो तार केस-संवेदी, लेकिन लहजे के प्रति संवेदनशील की तुलना करेंगे (उदाहरण के लिए एक = एक:
स्थानीय तार की तुलना के लिए सबसे अच्छा समाधान उचित स्थानों और विकल्पों के साथ समारोह toLocaleCompare() का उपयोग कर किया जा रहा है)।
यदि यह प्रदर्शन के कारणों के लिए पर्याप्त नहीं है, तो आप एक पैरामीटर के रूप में स्थान गुजर या तो toLocaleUpperCase()
या toLocaleLowerCase()
उपयोग कर सकते हैं:
if (firstString.toLocaleUpperCase(locale) === secondString.toLocaleUpperCase(locale)) {
// do something when equal
}
सिद्धांत रूप में वहाँ कोई मतभेद नहीं होना चाहिए। अभ्यास, सूक्ष्म कार्यान्वयन विवरण (या दिए गए ब्राउज़र में कार्यान्वयन की कमी) अलग परिणाम उपज सकता है ...
मूल जवाब
में मुझे यकीन है कि यदि आप वास्तव में Internationalization (i18n) में यह सवाल पूछने के लिए मतलब नहीं कर रहा हूँ टैग, लेकिन चूंकि आपने किया ...
शायद सबसे अप्रत्याशित उत्तर है: न तो।
मामले रूपांतरण के साथ tons of problems हैं, जो अनिवार्य रूप से कार्यात्मक मुद्दों की ओर जाता है यदि आप भाषा को इंगित किए बिना वर्ण केस को परिवर्तित करना चाहते हैं (जैसे जावास्क्रिप्ट केस में)। उदाहरण के लिए:
- ऐसी कई प्राकृतिक भाषाएं हैं जिनमें ऊपरी और लोअरकेस वर्णों की अवधारणा नहीं है। उन्हें बदलने की कोशिश में कोई बिंदु नहीं (हालांकि यह काम करेगा)।
- स्ट्रिंग को बदलने के लिए भाषा विशिष्ट नियम हैं। जर्मन sharp S चरित्र (ß) को दो ऊपरी मामले एस अक्षरों (एसएस) में परिवर्तित करने के लिए बाध्य किया गया है।
- तुर्की और अज़रबैजानी (या अज़ेरी अगर आप पसंद करते हैं) है "बहुत ही अजीब" concept of two i characters: dotless मैं (जो अपरकेस मैं करने के लिए धर्मान्तरित) और मैं बिंदीदार (जो अपरकेस मैं < धर्मान्तरित - इस फ़ॉन्ट सही प्रस्तुति के लिए अनुमति नहीं है, लेकिन यह वास्तव में अलग ग्लिफ है)।
- ग्रीक भाषा में कई "अजीब" रूपांतरण नियम हैं। एक विशेष नियम अपरकेस अक्षर sigma (Σ) के संबंध में है जो किसी शब्द में किसी स्थान पर निर्भर करता है जिसमें दो लोअरकेस समकक्ष होते हैं: नियमित सिग्मा (σ) और अंतिम सिग्मा (ς)। "उच्चारण" वर्णों के संबंध में अन्य रूपांतरण नियम भी हैं, लेकिन रूपांतरण फ़ंक्शन के कार्यान्वयन के दौरान उन्हें आमतौर पर छोड़ा जाता है।
- कुछ भाषाओं has title-case letters, i.e. Lj जिसे LJ या कम उचित एलजे जैसी चीजों में परिवर्तित किया जाना चाहिए। यह ligatures के संबंध में हो सकता है।
- अंत में कई compatibility characters हैं जो इसका अर्थ हो सकता है कि आप तुलना करने की कोशिश कर रहे हैं, लेकिन पूरी तरह से अलग-अलग वर्णों से बना है। इसे और भी खराब बनाने के लिए, "एई" जैसी चीजें जर्मन और फिनिश में "ä" के बराबर हो सकती हैं, लेकिन डेनिश में "æ" के बराबर होती हैं।
मैं आपको यह विश्वास दिलाने की कोशिश कर रहा हूं कि उपयोगकर्ता रूपांतरण की तुलना करना वास्तव में बेहतर है, इसे बदलने के बजाय। यदि यह उपयोगकर्ता से संबंधित नहीं है, तो इससे कोई फर्क नहीं पड़ता, लेकिन केस रूपांतरण में हमेशा समय लगेगा। क्यों परेशान?
स्रोत
2014-11-12 19:53:02
चूंकि अधिकांश तारों में अधिक लोअरकेस होगा, कम से कम लोअरकेस में कनवर्ट करने के लिए इलाज के लिए कम वर्ण होंगे लेकिन अन्य तो .. क्या कोई अंतर है? –
मुझे यकीन नहीं है कि जावास्क्रिप्ट में कोई अन्य अंतर है, एमएसडीएन लिंक कहता है कि कुछ पात्र हैं जो एक गोल यात्रा नहीं कर सकते हैं - "तारों को अपरकेस के लिए सामान्यीकृत किया जाना चाहिए। वर्णों का एक छोटा समूह, जब वे परिवर्तित होते हैं लोअरकेस के लिए, एक राउंड ट्रिप नहीं कर सकता है। राउंड ट्रिप बनाने के लिए पात्रों को एक लोकेल से दूसरे लोकेल में परिवर्तित करना है जो चरित्र डेटा को अलग-अलग दर्शाता है, और फिर परिवर्तित वर्णों से मूल पात्रों को सटीक रूप से पुनर्प्राप्त करने के लिए। " - लेकिन मुझे यकीन नहीं है कि यह अद्वितीय है या नहीं। अगर यह सभी/अधिकांश प्रोग्रामिंग भाषाओं पर लागू होता है। –
मैं अनुमान लगा रहा हूं कि यह ब्राउज़र किस प्रकार निर्भर करता है कि वे दो तरीके आंतरिक रूप से कैसे काम करते हैं, लेकिन वे दोनों शायद पात्रों पर पुन: प्रयास करते हैं और जांचते हैं और उन्हें परिवर्तित करते हैं, इसलिए इससे कोई फर्क नहीं पड़ता। वास्तविक जीवन में, यह निश्चित रूप से कोई फर्क नहीं पड़ता। – adeneo