javascript toLowerCase()函数返回不同的字符串

时间:2016-06-13 13:34:29

标签: javascript

console.log("HİNDİ".toLocaleLowerCase() == "hindi");
console.log("HİNDİ" == "hindi");

console.log("HİNDİ".toLowerCase());


console.log("HİNDİ".toLocaleLowerCase())
console.log("HİNDİ".toLowerCase())

我正在构建搜索功能,但我遇到了一件事:

"HİNDİ".toLocaleLowerCase() // "hindi"

"hindi" == "HİNDİ".toLocaleLowerCase() //false

这到底是怎么回事?

解决方案: @pmrotule的答案似乎有效:

function to_lower(s)
{
    var n = "";
    for (var i = 0; i < s.length; i++) // do it for one character at a time
    {
        var c = s[i].toLowerCase();

        // call replace() only if the character has a length > 1
        // after toLowerCase()
        n += c.length > 1 ? c[0].replace(/[^ -~]/g,'') : c;
    }
    return n;
}

谢谢,

2 个答案:

答案 0 :(得分:3)

问题是你的角色İ由2个字符组成。

你有I,然后是顶部的'dot'(UTF-8十进制代码:775)。

试试这个:

"HİNDİ".toLocaleLowerCase().split('').map((_,v)=>console.log(_.charCodeAt(0)))

与此相比:

"hindi".toLocaleLowerCase().split('').map((_,v)=>console.log(_.charCodeAt(0)))

答案 1 :(得分:3)

这是字符串格式的问题。 toLocaleLowerCase仅用于人类可读的显示。但是,你仍然可以做一些技巧:

if ("hindi" == "HİNDİ".toLowerCase().replace(/[^ -~]/g,''))
{
    alert("It works!");
}

修改

如果你想使它适用于所有特殊字符:

&#13;
&#13;
function to_lower(s)
{
    var n = "";
    for (var i = 0; i < s.length; i++) // do it for one character at a time
    {
        var c = s[i].toLowerCase();
        
        // call replace() only if the character has a length > 1
        // after toLowerCase()
        n += c.length > 1 ? c.replace(/[^ -~]/g,'') : c;
    }
    return n;
}

console.log("gök" == to_lower("GÖK"));
console.log("hindi" == to_lower("HİNDİ"));

function to_low(s) // shorter version
{
    var n = "";
    for (var i = 0; i < s.length; i++)
    { n += s[i].toLowerCase()[0]; }

    return n;
}

console.log("hindi" == to_low("HİNDİ"));
&#13;
&#13;
&#13;