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

问题描述 投票:1回答:2

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

Code

$('.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 + ' ';
  }
}]);

Example

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

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

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

Working code for return input word in lower case

$('.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"

javascript jquery regex utf-8
2个回答
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
投票

。如何使它当你输入像“Stackoverflow”这样的单词时,在单词array ['stack overflow']中有单词会在输入寄存器中返回结果。

您需要先将所有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;
}));
© www.soinside.com 2019 - 2024. All rights reserved.