我有一个像这样的数组
var invalidChars = ["^", "_", "[", "]"];
var inputText = "abc^" - true
var inputText = "abc_" - true
var inputText = "abc" - false
任何人都可以告诉我如何使用jQuery / Javascript检查输入字符串是否包含数组中的任何项目?
我尝试了$ .InArray和indexof。它不起作用检查整个字符串。
答案 0 :(得分:7)
some()为数组中的每个元素执行一次回调函数,直到找到一个回调返回true值的元素。如果找到这样的元素,some()会立即返回true。否则,some()返回false。仅为已分配值的数组的索引调用回调;对于已删除的索引或从未分配过值的索引,不会调用它。 (摘自here)
var invalidChars = ["^", "_", "[", "]"];
var inputText = "abc^";
var inputText1 = "abc_";
var inputText2 = "abc";
console.log(
invalidChars.some(function(v) {
return inputText.indexOf(v) != -1;
}),
invalidChars.some(function(v) {
return inputText1.indexOf(v) != -1;
}),
invalidChars.some(function(v) {
return inputText2.indexOf(v) != -1;
})
)
您也可以使用正则表达式来实现结果。使用数组生成正则表达式并检查字符串中的匹配。
var invalidChars = ["^", "_", "[", "]"];
var inputText = "abc^";
var inputText1 = "abc_";
var inputText2 = "abc";
var regex = new RegExp(invalidChars.map(function(v) {
return v.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
}).join('|'));
console.log(
regex.test(inputText),
regex.test(inputText1),
regex.test(inputText2)
)
请参阅此答案以获取字符串到正则表达式转换:Converting user input string to regular expression
答案 1 :(得分:2)
使用正则表达式和RegExp.test
方法的简单解决方案:
var re = /[\^\[\]_]/;
console.log(re.test("abc^")); // true
console.log(re.test("abc_")); // true
console.log(re.test("abc")); // false
答案 2 :(得分:1)
因为你被问及jquery:
var contains, inputText;
var invalidChars = ["^", "_", "[", "]"];
inputText = "abc^" // true
contains = $(invalidChars).filter(inputText.split('')).length > 0; // true
inputText = "abc_" // true
contains = $(invalidChars).filter(inputText.split('')).length > 0; // true
inputText = "abc" // false
contains = $(invalidChars).filter(inputText.split('')).length > 0; // false