代码之家  ›  专栏  ›  技术社区  ›  Chan Yoong Hon

Javascript搜索不区分大小写[重复]

  •  -2
  • Chan Yoong Hon  · 技术社区  · 6 年前

    我有一个字符串数组,我需要循环并检查另一个传入的字符串。

    var filterstrings = ['firststring','secondstring','thridstring'];
    var passedinstring = localStorage.getItem("passedinstring");
    
    for (i = 0; i < filterstrings.lines.length; i++) {
        if (passedinstring.includes(filterstrings[i])) {
            alert("string detected");
        }
    }
    

    如果出现以下情况,我如何确保在过滤时忽略区分大小写(最好使用正则表达式) var passedinstring 要有像这样的字符串 FirsTsTriNg fiRSTStrING ?

    0 回复  |  直到 5 年前
        1
  •  97
  •   user229044    5 年前

    您可以创建 RegExp filterstrings 第一

    var filterstrings = ['firststring','secondstring','thridstring'];
    var regex = new RegExp( filterstrings.join( "|" ), "i");
    

    然后 test 如果 passedinstring

    var isAvailable = regex.test( passedinstring ); 
    
        2
  •  62
  •   Nabin Paudyal    8 年前

    您可以简单地将passedinstring转换为小写。

    var passedinstring = localStorage.getItem("passedinstring").toLowerCase();
    
        3
  •  60
  •   cngzz1 Bob Cross    4 年前

    ES6数组方法 filter() 可以将解决方案简化为单行。使用 includes() 方法,用于确定数组是否在其条目中包含某个值,并与 toLowerCase() 方法将其转换为小写。

    var filterstrings = ['firststring','secondstring','thridstring'];
    var passedinstring = localStorage.getItem("passedinstring");
    
    // convert each string from filterstrings and passedinstring to lowercase
    // to avoid case sensitive issue.
    filteredStrings = filterstrings.filter((str) => str.toLowerCase().includes(passedinstring.toLowerCase())
    
        4
  •  16
  •   vsync    5 年前

    您可以切换 .includes .some 返回a的方法 布尔值 .
    它会的 找到匹配项后立即退出 ,这对大型阵列的性能非常有利:

    .some(item => item.toLowerCase() == lookup.toLowerCase())
    

    演示:

    var arr = ['foo','bar','bar'];
    var lookup = "bAr";
    
    // case-sensetive
    console.log( arr.includes(lookup) )
    
    // case-insensetive without caring about the type
    console.log( arr.some(x => x.toLowerCase() == lookup.toLowerCase()) ) 

    或者定义你自己的 阵列 原型法 独特的 姓名:

    // the name ("_includes") should be unique enough not to ever be overriten 
    // by future language updates or 3rd-party scripts
    Array.prototype._includes = function(target){ 
      return this.some(x => x.toLowerCase() == (target||'').toLowerCase()) 
    }
    
    console.log( 
      ['foo', 'bar', 'bar']._includes("bAr") 
    )
        5
  •  14
  •   Saurabh Mistry    8 年前

    将filterstring和passedinstring转换为小写并进行比较

    var filterstrings = ['firststring','secondstring','thridstring'];
    var passedinstring = 
    localStorage.getItem("passedinstring").toLowerCase();
    
    for (i = 0; i < filterstrings.lines.length; i++) {
       if (passedinstring.includes(filterstrings[i].toLowerCase())) {
           alert("string detected");
       }
    }
    
        6
  •  10
  •   Arvind Chourasiya    5 年前

    使用修复了案例敏感性问题 toLowerCase() 。它把所有的 string 在比较时降低大小写。

    var product=productList.filter((x) => x.Name.toLowerCase().includes(("Active").toLowerCase()))
    
        7
  •  5
  •   DDS    5 年前

    我的选择是比较UPPER和UPPER或lower和lower,转换两边(我经常在SQL中这样做):

        var filterstrings = ['firststring','secondstring','thirDstrIng'];
        var passedinstring =  'ThIrDsTrInG3';
        
        //used for of just to make it more readable
        for (filterstring of filterstrings) {
            if (passedinstring.toUpperCase().includes(filterstring.toUpperCase())) {
                alert("string detected");
            }
        
        }
    
    

    提示 string detected

        8
  •  4
  •   RAVI PRATAP SINGH RPS    4 年前
    var filterstrings = ['firststring','secondstring','thridstring'];
    var passedinstring = localStorage.getItem("passedinstring");
    
    filterstrings.filter(item => item.name.toLowerCase().includes(passedinstring.toLowerCase()))
    
        9
  •  3
  •   Mia loha.dev    5 年前

    我相信这会更简单、更短、更容易理解。

      const q = new RegExp(query, 'i');
    
      filteredUsers = users.filter((user: User) => {
        return (
          user.entity.short.match(q) ||
          user.firstname.match(q) ||
          user.lastname.match(q)
        );
      });
    
        10
  •  1
  •   Rounin    4 年前

    非正则表达式方法:

    我昨天遇到了这个问题。

    我有两个 arrays ,两者都不包含一致的大小写格式值:

    let availableDays = [
    
      'tuesday',
      'THURSDAY',
      'Monday'
    ];
    
    let orderedWeekdays = [
      
      'Monday',
      'Tuesday',
      'Wednesday',
      'Thursday',
      'FRIDAY'
    ]
    

    我需要在不区分大小写的基础上找出哪些项目来自 orderedWeekdays 出席 availableDays .


    解决方案:

    我的 非正则表达式 首先,这种方法是创建一个新的 array 用于检查:

    let availableDays_CheckingArray = availableDays.map((day) => day.toLowerCase());
    

    然后循环通过 订购工作日 ,应用a .toLowerCase() 每次转换,在比较之前:

    for (let i = 0; i < orderedWeekdays.length; i++) {
    
      if (availableDays_CheckingArray.includes(orderedWeekdays[i].toLowerCase())) {
    
        [... CODE HERE...]
      }
    }
    
        11
  •  0
  •   Shantesh Sindgi    4 年前

    你可以试试这个。

    var fruits = ["Banana", "Orange", "Apple", "Mango"];
    string = fruits.join(' ').toUpperCase();
    // Output"BANANA ORANGE APPLE MANGO"