如何在jquery textcomplete中仅使用数组小写单词返回输入寄存器?

时间:2018-01-01 10:34:37

标签: javascript jquery regex utf-8

我在项目中使用jquery textcomplete。是否可以仅使用小写字母使用字数组返回输入寄存器。我查看了谷歌翻译的近似功能,输入结果也没有返回输入。在那里,搜索是使用任何单词条目寄存器执行的,但只会以小写形式返回。如何设置,以便当您输入单词"Stackoveflow"中包含单词的['stackoverflow']之类的单词时,会将结果返回到输入寄存器中。

代码

$('.form-control').textcomplete([{
  words: ['stackoverflow', 'ҳайрат', 'english', 'маҳорат'],
  match: /(^|\S*)([^\u0000-\u007f]{2,}|\w{2,})$/,
  search: function(term, callback) {
    this.words = this.words.map( s => s.toLocaleLowerCase() );
    callback($.map(this.words, function(word) {
      return word.indexOf(term.toLocaleLowerCase()) === 0 ? word : null;
    }));
  },
  index: 2,
  replace: function(word) {
    return word + ' ';
  }
}]);

实施例

如何在数组中键入时返回相同的结果,单词将为小写。例如:

输入:Stackoverflow, STACKOVERFLOW, Ҳайрат, ҲАЙРАТ

输出:Stackoverflow, STACKOVERFLOW, Ҳайрат, ҲАЙРАТ

小写的返回输入字的工作代码

$('.form-control').textcomplete([{
  words: ['stackoverflow', 'ҳайрат', 'english', 'маҳорат'],
  match: /(^|\S*)([^\u0000-\u007f]{2,}|\w{2,})$/,
  search: function(term, callback) {
    this.words = this.words.map( s => s.toLocaleLowerCase() );
    callback($.map(this.words, function(word) {
      return word.indexOf(term.toLocaleLowerCase()) === 0 ? word : null;
    }));
  },
  index: 2,
  replace: function(word) {
    return word + ' ';
  }
}]);

此代码在任何情况下都会搜索键入的单词,但会从带有单词的数组中以小写形式返回。我们输入"English"结果的示例将为"english"。所需结果必须在输入案例"English"中。

2 个答案:

答案 0 :(得分:1)

如果我理解问题,这可以胜任:

$('#textcomplete').textcomplete([{
  words: ['stackoverflow', 'ҳайрат', 'english', 'маҳорат'],
  match: /(^|\S*)([^\u0000-\u007f]{2,}|\w{2,})$/,
  search: function(term, callback) {
    callback($.map(this.words, function(word) {
      if (word.indexOf(term.toLocaleLowerCase()) !== 0)
        return null;

      if (term[term.length-1] === term[term.length-1].toLocaleUpperCase())
        return word.toLocaleUpperCase(); // last char is upper = uppercase
      if (term[0] === term[0].toLocaleUpperCase())
        return word.charAt(0).toLocaleUpperCase() + word.slice(1); // first char is upper = capitalized
        
      return word; // default; is lowercase
    }));
  },
  index: 2,
  replace: function(word) {
    return word + ' ';
  }
}]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.textcomplete/1.8.4/jquery.textcomplete.min.js"></script>

<textarea id="textcomplete"></textarea>

答案 1 :(得分:-1)

  

。当你输入像“Stackoveflow”这样的单词时如何制作它   在单词array ['stackoverflow']中有单词返回结果   在输入寄存器中。

您需要先将所有words转换为localeLowerCase,以防它们尚未

this.words = this.words.map( s => s.toLocaleLowerCase() );

您可以将此行放在callback

之前

此外,在检查时,您也可以将term转换为 Locale-Lower-Case

this.words = this.words.map( s => s.toLocaleLowerCase() );
callback($.map(this.words, function(word) {
  return word.indexOf(term.toLocaleLowerCase()) === 0 ? word : null;
}));