JS – jQuery inarray ignoreCase()并包含()

好吧,我更像是一个PHP人员,除了简单的设计相关操作之外,我的JS技能几乎没有任何JS,所以如果我问明显的话,请原谅。

以下操作在PHP中是轻而易举的(也可能在JS中 – 但我在这里使用不熟悉的语法…)

这是某种输入validation

var ar = ["BRS201103-0783-CT-S", "MAGIC WORD", "magic", "Words", "Magic-Word"]; jQuery(document).ready(function() { jQuery("form#searchreport").submit(function() { if (jQuery.inArray(jQuery("input:first").val(), ar) != -1){ jQuery("#contentresults").delay(800).show("slow"); return false; } 

这个问题有两个部分。

  • 1 – 如何使数组不区分大小写?

例如 – BRS201103-0783-CT-S将给出与brs201103-0783-ct-sBrs201103-0783-CT-sMAGIC magic Magic MaGIc相同的结果

基本上我需要一些像ignoreCase()的数组,但我找不到任何在jQuery和JS中的引用…

我试过toLowerCase() – 但是它没有在数组上工作(ittirating ??)而且,它会解决混合情况吗?

  • 2 – 如何使function仅识别元素的部分或组合?

例如 – 如果只输入"word" ,我希望它作为"words"传递,如果有人输入"some word"它应该通过(包含“单词”)

第1部分

您可以将数组处理为完全小写,并将输入小写,以便indexOf()可以像执行不区分大小写的搜索一样工作。

您可以使用toLowerCase()小写一个字符串,就像您已经想到的那样。

要做一个数组,你可以使用…

 arr = arr.map(function(elem) { return elem.toLowerCase(); }); 

第2部分

您可以检查子字符串,例如……

 // Assuming you've already transformed the input and array to lowercase. var input = "word"; var words = ["word", "words", "wordly", "not"]; var found = words.some(function(elem) { return elem.indexOf(input) != -1; }); 

或者,您可以跳过此实例,在检查indexOf()之前,通过在每个elem上调用toLowerCase()将数组转换为全小写。

旧IE中不支持some()map() ,但对polyfill来说是微不足道的。 链接文档中提供了每种填充的示例。

正如FabrícioMatté所指出的,你可以在这里使用jQuery等价物, $.map()用于Array.prototype.map()$.grep()length属性用于Array.prototype.some() 。 然后,您将免费获得浏览器兼容性。

要检查数组是否包含一个不区分大小写的元素,我使用了以下代码:

  ret = $.grep( array, function (n,i) { return ( n && n.toLowerCase().indexOf(elem.toLowerCase())!=-1 ); }) ; 

这是一个玩数组匹配不区分大小写的小提琴