javascript - insensitive - “İ”.toLowerCase()!=“I”
javascript ignorecase (1)
En turco, hay una letra İ
que es la forma mayúscula de i
. Cuando lo convierto en minúsculas, obtengo un resultado extraño. Por ejemplo:
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()
devuelve un carácter adicional, y si no me equivoco, es "İ".toLowerCase()
ARRIBA (U + 0307) .
¿Cómo me deshago de este personaje?
Podría simplemente filtrar la cadena:
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(""));
¿Pero estoy entregando esto correctamente? ¿Hay alguna forma más preferible? Además, ¿por qué aparece este carácter extra en primer lugar?
Hay alguna inconsistencia. Por ejemplo, en turco, hay una forma minúscula de I
: ı
. ¿Cómo es que la siguiente comparación devuelve verdadero?
console.log( "ı".toUpperCase() == "i".toUpperCase() ) // true
mientras
console.log( "İ".toLowerCase() == "i" ) // false
devuelve falso?
Necesitará una conversión de caso específica de Turquía, disponible con String#toLocaleLowerCase
:
let s = "İ";
console.log(s.toLowerCase().length);
console.log(s.toLocaleLowerCase(''tr-TR'').length);