2016-05-18 4 views
4

У меня есть массив, как этотКак проверить часть строки соответствует массив

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

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

Может ли один пожалуйста, дайте мне знать, как я могу проверить, если моя строка ввода содержит какие-либо элементы в массиве с помощью JQuery/JavaScript?

Я пробовал $ .InArray и indexof. он не работает как те, которые проверяют целую строку.

ответ

7

Вы можете использовать some() и indexOf()

некоторые() выполняет функцию обратного вызова один раз для каждого элемента, присутствующего в массиве, пока не найдет тот, где обратный вызов возвращает истинное значение. Если такой элемент найден, some() немедленно возвращает true. В противном случае some() возвращает false. callback вызывается только для индексов массива, которым присвоены значения; он не вызывается для индексов, которые были удалены или которые никогда не были присвоены значениям. (Из 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

Так как ваш вопрос о 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 
2

Простого решении с использованием регулярных выражений шаблона и RegExp.test метода:

var re = /[\^\[\]_]/; 

console.log(re.test("abc^")); // true 
console.log(re.test("abc_")); // true 
console.log(re.test("abc")); // false 
Смежные вопросы