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

Lam*_*mps 4 javascript jquery

我有这样的数组

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

var inputText = "abc^"   - true
var inputText = "abc_"   - true
var inputText = "abc"    - false
Run Code Online (Sandbox Code Playgroud)

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

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

Pra*_*lan 7

你可以使用some()indexOf()

some()为数组中的每个元素执行一次回调函数,直到找到一个回调返回true值的元素.如果找到这样的元素,some()会立即返回true.否则,some()返回false.仅为已分配值的数组的索引调用回调; 对于已删除的索引或从未分配过值的索引,不会调用它.(摘自这里)

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;
  })
)
Run Code Online (Sandbox Code Playgroud)

对于旧浏览器,检查方法some()的polyfill选项.


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

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)
)
Run Code Online (Sandbox Code Playgroud)

请参阅此答案以获取字符串到正则表达式转换:将用户输入字符串转换为正则表达式