Javascript 包括()不区分大小写

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

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有像 FirsTsTriNgfiRSTStrING这样的字符串,我如何确保在过滤时忽略大小写敏感性(最好使用 regex) ?

195254 次浏览

您只需将传递的字符串转换为小写即可。

var passedinstring = localStorage.getItem("passedinstring").toLowerCase();

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

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

您可以首先从 filterstrings创建一个 正则表达式

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

然后 test如果 passedinstring在那里

var isAvailable = regex.test( passedinstring );

ES6阵列方法 Filter ()可以将解决方案简化为一行。使用 包括()方法确定数组的条目中是否包含某个值,并与 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())

我的选择是比较 UPPER 和 UPPER 或更低的转换(我经常在 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

固定的大小写敏感性问题使用 toLowerCase()。它把所有的 strings小写。

var product=productList.filter((x) =>
x.Name.toLowerCase().includes(("Active").toLowerCase()))

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

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

您可以使用返回 布尔型.some方法切换 .includes
它将采用 一找到匹配的就立即退出,这对于大型数组的性能非常好:

.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")
)

你可以试试这个。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
string = fruits.join(' ').toUpperCase();
// Output"BANANA ORANGE APPLE MANGO"
var filterstrings = ['firststring','secondstring','thridstring'];
var passedinstring = localStorage.getItem("passedinstring");


filterstrings.filter(item => item.name.toLowerCase().includes(passedinstring.toLowerCase()))

非正则表达式方法:

我昨天偶然发现了这个问题。

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

let availableDays = [


'tuesday',
'THURSDAY',
'Monday'
];


let orderedWeekdays = [
  

'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'FRIDAY'
]

在不区分大小写的基础上,我需要找出 orderedWeekdays中的哪些项目出现在 availableDays中。


解决方案:

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

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

然后循环通过 orderedWeekdays,每次应用 .toLowerCase()转换,然后进行比较:

for (let i = 0; i < orderedWeekdays.length; i++) {


if (availableDays_CheckingArray.includes(orderedWeekdays[i].toLowerCase())) {


[... CODE HERE...]
}
}