JavaScript没有';我不认识土耳其语字符

JavaScript没有';我不认识土耳其语字符,javascript,character-encoding,Javascript,Character Encoding,我有以下代码: if (term.length > 0) { var inputVal = $("#input").val(); if (inputVal.indexOf("jason") !== -1) { results = $.ui.autocomplete.filter(table, term); } } 这很有效。但是当我把“jason”改成“jasön”或“jasün”或其他土耳其语字符时,它就不起作用了。是不是因为js文件的编码?我将编码更改为Unico

我有以下代码:

if (term.length > 0) {
  var inputVal = $("#input").val();
  if (inputVal.indexOf("jason") !== -1) {
    results = $.ui.autocomplete.filter(table, term);
  }
}

这很有效。但是当我把
“jason”
改成
“jasön”
“jasün”
或其他土耳其语字符时,它就不起作用了。是不是因为js文件的编码?我将编码更改为Unicode(带签名的utf-8)-代码页65001,然后是土耳其ISO 28599,但它不起作用。你能告诉我该怎么做吗?谢谢。

它确实可以识别土耳其语字符,但您正在对所述字符串进行平等性检查。你必须理解的是,即使
o
只是一个带有重音的
o
,它仍然是一个不同的字符,因此即使你没有进行三重相等检查,也会使你的条件错误

'ö' == 'o'  // false
'ö' === 'o' // false
您应该做的是将输入值转换为不带重音的字符串,因为这显然是您所期望的。这正是您所寻找的,我想说,如果您能够访问ES6功能,这将是最好的,因为它非常干净,使用简单

function convert (str) {
  return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '')
}

if (term.length > 0) {
  var inputVal = convert($('#input').val())
  if (inputVal.indexOf('jason') !== -1) {
    results = $.ui.autocomplete.filter(table, term)
  }
}
否则,如果ES6不是一个选项,那么可以使用它,只需创建一个可以在任何需要的地方重用的函数util即可


关于文件的编码,如果处理土耳其语的特殊字符,您应该使用
utf-8

您能澄清一下您将“jason”改为“jasön”的位置吗?是输入值还是正则表达式字符串?您是否希望“jasön”与regex/jason/i或/jasön/i匹配?@purplecat我试图做的是,当输入包含jasön时,这一行应该起作用:`results=$.ui.autocomplete.filter(table,term);`它可以是正则表达式或字符串,但我想字符串更好。谢谢。不管输入是“jason”还是“jasön”,您是否希望它都能正常工作?