2016-06-13 11 views
3

javascriptのtoLowerCaseメソッド()関数は、私は検索機能を構築していますが、私は事に遭遇

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())

異なる文字列を返しますか?

ソリューション: pmrotuleの答え@に動作するようです:問題は、あなたのキャラクターİは2つの文字で構成されていることである

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; 
} 

おかげで、

+0

異なります文字列のエンコーディング? Javascriptは内部的にUTF-16を使用します。あなたのコンソールで ''HİNDİ ".toLocaleLowerCase()'を実行することができます。また、文字コードを直接入力することもできます。例: '" \ u90AB "' –

+0

どちらもUTF8ですが、コンソール上でstackowerflowで試してみてください。同じ結果。 – serkan

+0

HTMLファイルの ''セクションにこれがあることを確認してください: ''(HTML5)またはHTML4: '。 – trincot

答えて

3

これは、文字列形式の問題である:

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

はこれとそれを比較してください。 toLocaleLowerCaseは、人間が判読可能な表示のみを目的としています。あなたはそれがすべての特殊文字と連携したい場合は

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

EDIT

:しかし、あなたが行うことができますトリックはまだある

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İ"));

+0

( "gök" == "GÖK" .toLowerCase()です。replace(/ [^ - 〜]/g、 ''))はfalseを返します。 – serkan

+0

@ serdem420あなたの例のようなすべての特殊文字で動作するように私の答えを編集しました。 – pmrotule

+0

ありがとうございました! – serkan

3

あなたはIを持っていて、次に「ドット」(UTF-8 10進コード:775)を持っています。

これを試してみてください:

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

+0

答えをありがとう、それは理にかなっています。このような状況に「真の」ものを生み出す方法はありますか? – serkan

+1

はい、あります。しかし、それは良い解決策ではありません。文字列から分音記号をすべて削除して比較することができます。この場合、 –

関連する問題