7

好吧,我更像是一个 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;
          }

这个问题有 2 个部分。

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

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

基本上我需要类似 ignoreCase() 的数组,但我在 jQuery 或 JS 中找不到任何引用...

我试过toLowerCase()- 但它不适用于阵列(ittirating??)而且,它会解决混合情况吗?

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

例如 - 如果只有一种类型"word",我希望它作为 传递"words",并且如果有人键入"some word"它应该传递(包含“单词”)

4

2 回答 2

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()each 。elemindexOf()

some()并且map()在较旧的 IE 中不受支持,但对于 polyfill 来说是微不足道的。链接文档中提供了每个 polyfill 的示例。

正如Fabrício Matté还指出的那样,您可以在此处使用 jQuery 等效项,$.map()forArray.prototype.map()$.grep()withlength属性 for Array.prototype.some()。然后您将免费获得浏览器兼容性。

于 2012-07-16T00:54:57.950 回答
1

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

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

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

于 2016-10-17T22:20:47.077 回答