2016-06-13 21 views
3

Javascript toLowerCase() Funktion gibt verschiedene String

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

Ich bin eine Suchfunktion Gebäude, aber ich komme über eine Sache:

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

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

Was zum Teufel ist hier los?

Lösung: @ pmrotule Antwort scheint zu funktionieren:

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

Danke,

+0

Verschiedene Kodierung auf den Saiten? Javascript verwendet intern UTF-16. Sie könnten "HİNDİ" .toLocaleLowerCase() 'in Ihrer Konsole ausführen. Sie können auch versuchen, den Zeichencode direkt einzugeben. Beispiel: '" \ u90AB "' –

+0

Beide UTF8, Sie können es auch auf der Konsole hier auf Stackowerflow versuchen. Gleiches Ergebnis. – serkan

+0

Stellen Sie sicher, dass Sie dies im Abschnitt '' Ihrer HTML-Datei haben:' '(HTML5) oder für HTML4:' '. – trincot

Antwort

3

Es ist ein Problem der String-Format. toLocaleLowerCase ist nur für eine lesbare Anzeige gedacht. Allerdings gibt es immer noch ein Trick ist, können Sie tun:

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

EDIT

Wenn Sie es funktioniert mit allen Sonderzeichen machen wollen:

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

in diesem Fall ("gök" == "GÖK" .toLowerCase()).ersetzen (/ [^ - ~]/g, '')) return false. – serkan

+0

@ serdem420 Ich habe meine Antwort so bearbeitet, dass sie mit allen Sonderzeichen wie in Ihrem Beispiel funktioniert. – pmrotule

+0

Vielen Dank! – serkan

3

Das Problem ist, dass Ihr Charakter İ von 2 Zeichen besteht.

Sie haben die I und dann den 'Punkt' an der Spitze (UTF-8 Dezimal-Code: 775).

Versuchen Sie folgendes:

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

es mit diesem vergleichen:

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

+0

Danke für die Antwort, das macht Sinn. Gibt es eine Möglichkeit, für diese Art von Situationen "wahr" zu produzieren? – serkan

+1

Ja, da ist. Aber es ist keine nette Lösung. Sie können jede diakritische Markierung aus Ihrer Zeichenfolge entfernen und vergleichen. –

Verwandte Themen