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

时间:2012-07-16 00:45:09

标签: javascript jquery arrays contains case-insensitive

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

以下操作在PHP中是轻而易举的(也可能在JS中 - 但我在这里用不熟悉的语法进行斗争......)

这是某种输入验证

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 - 如何才能使数组不区分大小写呢?

E.g。 - BRS201103-0783-CT-S会得到与brs201103-0783-ct-sBrs201103-0783-CT-sMAGIC magic Magic MaGIc

相同的结果

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

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

  • 2 - 如何使功能仅识别部件或 元素的组合?

E.g。 - 如果仅键入"word",我希望将其作为"words"传递,如果有人键入"some word"则应该传递(包含“word”)

2 个答案:

答案 0 :(得分:8)

第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; });

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

旧版IE不支持

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

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

答案 1 :(得分:1)

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

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

这是一个小提琴 array match case insensitive