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-s
和Brs201103-0783-CT-s
或MAGIC 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 ); }) ;
这是一个玩数组匹配不区分大小写的小提琴