“İ”.toLowerCase()!=“我”

时间:2017-10-16 12:42:34

标签: javascript case-sensitive uppercase

在土耳其语中,有一个字母İ,它是i的大写形式。当我将它转换为小写时,我得到一个奇怪的结果。例如:

var string_tr = "İ".toLowerCase();
var string_en = "i";

console.log( string_tr == string_en );  // false
console.log( string_tr.split("") );     // ["i", "̇"]
console.log( string_tr.charCodeAt(1) ); // 775
console.log( string_en.charCodeAt(0) ); // 105

"İ".toLowerCase()会返回一个额外的字符,如果我没记错的话,那就是COMBINING DOT ABOVE (U+0307)

如何摆脱这个角色?

我可以过滤字符串:

var string_tr = "İ".toLowerCase();

string_tr = string_tr.split("").filter(function (item) {
    if (item.charCodeAt(0) != 775) {
        return true;
    }
}).join("");

console.log(string_tr.split(""));

但是我正确地处理了这个吗?有更好的方法吗?此外,为什么这个额外的角色出现在第一位?

存在一些不一致。例如,在土耳其语中,有一个小写形式的Iı。为什么以下比较返回true

console.log( "ı".toUpperCase() == "i".toUpperCase() ) // true

console.log( "İ".toLowerCase() == "i" ) // false

返回false?

3 个答案:

答案 0 :(得分:32)

您需要特定于土耳其语的案例转换,String#toLocaleLowerCase提供



let s = "İ";

console.log(s.toLowerCase().length);
console.log(s.toLocaleLowerCase('tr-TR').length);




答案 1 :(得分:0)

您可以仅对语言使用LocalLowerCase或LocalUpperCase 像土耳其语和其他字母 点缀和无点i版本,例如阿塞拜疆,哈萨克斯坦,塔塔尔和克里米亚Ta人。

var string_tr = "İ".toLocalLowerCase();
var string_en = "i";

console.log( string_tr == string_en );  // false
console.log( string_tr.split("") );     // ["i", "̇"]
console.log( string_tr.charCodeAt(1) ); // 775
console.log( string_en.charCodeAt(0) ); // 105

答案 2 :(得分:-1)

String.prototype.turkishToLower = function () {
var string = this;
var letters = {
  İ: "i", I: "i", ı: "i", Ş: "s", ş: "s", Ğ: "g", ğ: "g", Ü: "u", ü: "u", Ö: "o", ö: "o", Ç: "c", ç: "c",
};
string = string.replace(/(([İIıŞşĞğÜüÇçÖö]))/g, function (letter) {
  return letters[letter];
});
return string.toLowerCase();}


String.prototype.turkishToUpper = function(){
var string = this;
var letters = { "i": "I", "ş": "S", "ğ": "G", "ü": "U", "ö": "O", "ç": "C", "ı": "I" };
string = string.replace(/(([iışğüçö]))/g, function(letter){ return letters[letter]; });
return string.toUpperCase();}

使用“字符串” .turkishToLower()