假设我有一个过滤字符串数组,我需要循环并检查其他传入的字符串。
//in Swift 3.0 converting string to NSDate with its format
let dateString = self.scoring_date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"
dateFormatter.locale = Locale.init(identifier: "en_GB")
self.dateObj = dateFormatter.date(from: dateString! as String )!
dateFormatter.dateFormat = "MM-dd-yyyy"
print("Dateobj: \(dateFormatter.string(from: self.dateObj))")
//converting NSDate to String
let today = Date()
today.toString(dateFormat: "dd-MM")
如果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
等字符串,我如何确保在此处忽略区分大小写(最好使用正则表达式)?
答案 0 :(得分:16)
您可以先从filterstrings
var filterstrings = ['firststring','secondstring','thridstring'];
var regex = new RegExp( filterstrings.join( "|" ), "i");
如果test
在那里,则然后passedinstring
var isAvailable = regex.test( passedinstring );
答案 1 :(得分:8)
ES6数组方法filter()可以简单地在一行中求解,可以使用includes()方法来确定数组在条目中是否包含某个值。
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.totoLowerCase())
答案 2 :(得分:7)
您只需将传递的字符串转换为小写。
var passedinstring = localStorage.getItem("passedinstring").toLowerCase();
答案 3 :(得分:4)
使用toLowerCase()
解决了区分大小写的问题。比较时会将所有string
转换为小写。
var product=productList.filter((x) => x.Name.toLowerCase().includes(("Active").toLowerCase()))
答案 4 :(得分:3)
将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");
}
}
答案 5 :(得分:1)
我的选择是将UPPER与UPPER进行比较,或将LOWPER与较低的转换双方进行比较(我在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
答案 6 :(得分:0)
我相信这会更简单、更短、更容易理解。
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)
);
});
答案 7 :(得分:0)
您可以使用返回 boolean 的 .some
方法切换 #include <stdio.h>
#include <string.h>
void showday ( char *selectedday) {
char string[100] = "";
char newline[3] = "";
int result = 0;
int output = 0;
FILE* openbill = NULL;
openbill = fopen ( "bill.txt", "r");
if ( openbill == NULL) {
perror ( "bill.txt");
return;
}
do {
string[0] = 0;//set empty string
if ( 1 == ( result = fscanf ( openbill, "%2[\n]", newline))) {
if ( output) {//enabled
printf ( "%s", newline);
}
if ( '\n' == newline[1]) {//two newlines
output = 0;//disable
}
}
else {
result = fscanf ( openbill, "%99s", string);
if ( strstr ( string, selectedday)) {
output = 1;//enable
}
}
if ( output && string[0]) {//enabled and string not empty
printf ( "%s ", string);
}
} while ( EOF != result);
fclose ( openbill);
}
int main ( void) {
showday ( "monday");
return 0;
}
。
它会在找到匹配项后立即退出,这对于大型数组的性能非常有用:
.includes
.some(item => item.toLowerCase() == lookup.toLowerCase())
或者使用唯一名称定义您自己的Array原型方法:
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()) )