【问题标题】:jQuery Multiple Strings Case and Accent InsensitivejQuery 多字符串大小写和重音不敏感
【发布时间】:2016-02-03 18:35:27
【问题描述】:

我在这里的第一篇文章。我在网站上有一个功能,可以显示随机生成的法语短语,挑战读者在文本框中将其翻译成英文。单击按钮时,输入的文本将与所有可能的答案进行比较(给定短语有多个正确的翻译)。我已经四处寻找答案,但似乎没有什么适合我的情况。

这是 jQuery:

var correctAnswer = function(){$('#correctmessage').show('fast');$('#errormessage').hide('fast');}
var wrongAnswer = function(){$('#errormessage').show('fast');$('#correctmessage').hide('fast');}

$('#1').find('button').on('click', function(){
    var text = $(this).parent().find('.translatefield').val();
    var compareText = "I went to the cinema";
    var compareText2 = "I have been to the cinema";
    if (text == compareText || text == compareText2) {
        correctAnswer();
    }
    else {
        wrongAnswer(); 
    }
});

所以我想知道是否可以将“比较”变量放入一个变量中,即“我去过电影院,或者我去过电影院,等等”,以保持整洁。但主要是我需要知道如何在 if 中调用该变量,以便它也接受没有重音字符且无论大小写的答案......我希望这很清楚!感谢您提供的任何帮助,这让我很恼火!

【问题讨论】:

  • 您可以将这些短语放在一个数组中。 var compareText = ['I went to the cinema','I have been to the cinema'] 那你就可以用数组.some()方法来测试了。
  • 最可能最简单的解决方案是首先将所有内容替换为其等效项,例如将 e-accent 替换为 e/全部大写为小写,然后您只需要检查 'e'

标签: javascript jquery


【解决方案1】:

正如 Mark Holland 所说,使用数组作为比较短语。

如果你仍然使用 jQuery,你可以使用jQuery.inArray()

https://api.jquery.com/jQuery.inArray/

var compareText = ['我去了电影院','我去过电影院'];

if ($.inArray(text.toLowerCase(), compareText)) {
   ... do stuff
}

要忽略重音符号,请使用如下解决方案:

String.prototype.removeAccents = function(){
 return this
         .replace(/[áàãâä]/gi,"a")
         .replace(/[éè¨ê]/gi,"e")
         .replace(/[íìïî]/gi,"i")
         .replace(/[óòöôõ]/gi,"o")
         .replace(/[úùüû]/gi, "u")
         .replace(/[ç]/gi, "c")
         .replace(/[ñ]/gi, "n")
         .replace(/[^a-zA-Z0-9]/g," ");
}

感谢 Luan Castro Perform a find/match with javascript, ignoring special language characters (accents, for example)?

【讨论】:

  • 您好 kernelmaster,非常感谢您的帮助。我得到了数组工作(不适用于 ($.inArray,但它适用于 jQuery.inArray - 知道为什么会这样吗?可能我遗漏了一些明显的东西)。重音字符删除也很有效 - 谢谢将我链接到 Castro 的解决方案。
【解决方案2】:

正如 Mark Holland 所说,数组会回答您的第一个问题。

JS arrays

要忽略重音,快速搜索给了我这个答案:

Replace accents

为了忽略小写/大写,快速搜索给了我这个答案。

Ignore case

【讨论】:

    【解决方案3】:

    如何将字符串设置为一个数组并迭代该数组以与答案进行比较?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2019-06-25
      • 2016-05-30
      • 2011-02-06
      • 1970-01-01
      • 2011-07-16
      • 2013-10-31
      相关资源
      最近更新 更多