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

How to check part of string matches array

本文关键字:一部分 数组 字符串 何检查 检查      更新时间:2023-09-26

我有一个类似的数组

var invalidChars = ["^", "_", "[", "]"];
var inputText = "abc^"   - true
var inputText = "abc_"   - true
var inputText = "abc"    - false

有谁能告诉我如何使用jQuery/Javascript检查我的输入字符串是否包含数组中的任何项吗?

我尝试了$.InArray和indexof。它不能像检查整个字符串那样工作。

您可以使用some()indexOf()

some()为数组中的每个元素执行一次回调函数,直到找到回调返回真值的元素为止。如果找到这样的元素,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;
  })
)

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


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

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

关于字符串到正则表达式的转换,请参阅以下答案:将用户输入字符串转换为正则表达式

使用正则表达式模式和RegExp.test方法的简单解决方案:

var re = /['^'[']_]/;
console.log(re.test("abc^"));  // true
console.log(re.test("abc_"));  // true
console.log(re.test("abc"));   // false

由于您询问了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