如何检查字符串匹配数组的一部分

时间:2016-05-18 07:17:04

标签: javascript jquery

我有一个像这样的数组

var invalidChars = ["^", "_", "[", "]"];

var inputText = "abc^"   - true
var inputText = "abc_"   - true
var inputText = "abc"    - false

任何人都可以告诉我如何使用jQuery / Javascript检查输入字符串是否包含数组中的任何项目?

我尝试了$ .InArray和indexof。它不起作用检查整个字符串。

3 个答案:

答案 0 :(得分:7)

您可以使用 some() indexOf()

  

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;
  })
)
对于旧浏览器,请检查polyfill option for method some()

您也可以使用正则表达式来实现结果。使用数组生成正则表达式并检查字符串中的匹配。

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