string.indexOf()不能正常使用javascript

时间:2018-02-06 07:44:37

标签: javascript

我无法理解为什么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);

3 个答案:

答案 0 :(得分:4)

İstanbul的小写字母i̇stanbul不是istanbul(注意: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]

其余代码将相应地运作