string.indexOf()无法使用javascript

string.indexOf()无法使用javascript,javascript,Javascript,我不明白为什么indexOf不起作用。 İstanbul中的字符“İ”是UTF-8字符,但在将此字符串转换为小写后,看起来还可以 var t=“İstanbul”; var q=“ist”; filterCandidate=t.toLowerCase()//“伊斯坦布尔” var valueToMatch=filterCandidate.trim().substring(0,q.length)//“是” 日志(“filterCandidate:+filterCandidate”); conso

我不明白为什么indexOf不起作用。 İstanbul中的字符“İ”是UTF-8字符,但在将此字符串转换为小写后,看起来还可以

var t=“İstanbul”;
var q=“ist”;
filterCandidate=t.toLowerCase()//“伊斯坦布尔”
var valueToMatch=filterCandidate.trim().substring(0,q.length)//“是”
日志(“filterCandidate:+filterCandidate”);
console.log(“valueToMatch:+valueToMatch”);
showElement=false;
如果(q.indexOf(valueToMatch)>-1){
showElement=true;
}

console.log(“showElement:+showElement”)
的小写字母
i̇stanbul
i̇stanbul
而不是
伊斯坦布尔
(注:
i
之间的区别)

你在评论中说:

在土耳其语中,“I”是“İ”,而“I”是“I”。此函数仅在我使用“İ”时有效。客户可以在不起作用的地方使用LowerCCAE“i”

解决方案:使用t.tolocalLowercase('tr-tr')代替t.toLowerCase()

"İstanbul".toLowerCase()                // i̇stanbul 
"İstanbul".toLocaleLowerCase('tr-TR')   // istanbul
var t=“İstanbul”;
var q=“ist”;
filterCandidate=t.toLocaleLowerCase('tr-tr')//“伊斯坦布尔”
var valueToMatch=filterCandidate.trim().substring(0,q.length);
日志(“filterCandidate:+filterCandidate”);
console.log(“valueToMatch:+valueToMatch”);
showElement=false;
如果(q.indexOf(valueToMatch)>-1){
showElement=true;
}

console.log(“showElement:+showElement”)保重我的朋友字母“İ”不一样字母“I”字母“İ”的一些小写字母将永远不会与字母“I”相同,证据是

 var t = "İstanbul";
 var q = "ist";
 filterCandidate = t.toLowerCase();
 filterCandidate.toUpperCase(); //this will return "İSTANBUL" again
另一个证据是:-

filterCandidate.length // This will return 9 not 8 also the word have only 8 letters.
另一种方法是:-

filterCandidate[1] // It will return strange letter "̇"

最好创建一个替换对象来保存特殊字符数据

var sub = {"İstanbul":"Istanbul"}

var data = "İstanbul";
var t = sub[data]

代码的其余部分将相应地工作

i
和小写的
İ
是两个不同的字符。我正在建立土耳其网站,我不能将“İstanbul”改为“伊斯坦布尔”,我需要解决土耳其语中“İstanbul”的问题,“i”是“İ”,而“i”是“i”。此函数仅在我使用“İ”时有效。客户可以在不起作用的地方使用小写字母sae“i”。请使用
.tolocallowercase('tr-tr')
而不是
.toLowerCase()
我很感激。在jsgrid表中进行筛选时,它导致了问题。