我无法理解为什么indexOf无效。 在伊斯坦布尔的字符“İ”是UTF-8字符,但在将此字符串转换为小写后,它看起来没问题?!
var t = "İstanbul";
var q = "ist";
filterCandidate = t.toLowerCase(); //"istanbul"
var valueToMatch = filterCandidate.trim().substring(0, q.length); //"is"
console.log("filterCandidate: " + filterCandidate);
console.log("valueToMatch: " + valueToMatch);
showElement = false;
if (q.indexOf(valueToMatch) > -1) {
showElement = true;
}
console.log("showElement: " + showElement);
答案 0 :(得分:4)
İstanbul
的小写字母i̇stanbul
不是istanbul
(注意:i̇
和i
之间的差异)。
你在评论中说:
土耳其语中“我”是“İ”而“i”是“我”。此功能仅在我使用“İ”时有效。客户可以在不工作的地方使用lowercsae“i”
解决方案:使用 t.toLocaleLowerCase('tr-TR')而不是 t.toLowerCase()。
"İstanbul".toLowerCase() // i̇stanbul
"İstanbul".toLocaleLowerCase('tr-TR') // istanbul
var t = "İstanbul";
var q = "ist";
filterCandidate = t.toLocaleLowerCase('tr-TR'); //"istanbul"
var valueToMatch = filterCandidate.trim().substring(0, q.length);
console.log("filterCandidate: " + filterCandidate);
console.log("valueToMatch: " + valueToMatch);
showElement = false;
if (q.indexOf(valueToMatch) > -1) {
showElement = true;
}
console.log("showElement: " + showElement);
答案 1 :(得分:0)
照顾我的朋友,字母“İ”与字母“I”不一样,字母“İ”的小写字母将永远不会与字母“I”相同且证据是...... < / p>
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 "̇"
答案 2 :(得分:0)
更好地创建一个替代对象来保存特殊字符数据。
var sub = {"İstanbul":"Istanbul"}
var data = "İstanbul";
var t = sub[data]
其余代码将相应地运作