#javascript #arrays #regex #validation
#javascript #массивы #регулярное выражение #проверка
Вопрос:
Итак, я пытаюсь проверить тип данных alpha char в массиве с помощью функции. Если массив не содержит только буквенный символ и, возможно, символы (одинарные / двойные кавычки, запятые и пробелы), регистрируйте сообщение. Я пробовал работать в основном с регулярным выражением, перебирая каждый элемент в массиве, сначала используя !== . Также пытался сначала объединить массив в строку и выполнить проверку по регулярному выражению, но, похоже, работает не совсем правильно. В принципе, я хотел бы, чтобы первый массив проверялся непрерывно и переходил к остальной части скрипта, а array1 регистрировал сообщение. Это своего рода то, где я нахожусь, любая помощь была бы тузом.
array = ['hello', 'hello'];
array1 = ['hello', 'hello1'];
var arrayChar = new RegExp(/[a-z',"s]/i);
function validateArrayChar(array,char) {
array.every(function(element) {
if (!char.test(element)) {
console.log("Please re-enter data with valid letters.");
}
});
}
validateArrayChar(array1, arrayChar);
Комментарии:
1. Вы пытаетесь инвертировать регулярное выражение в конструкторе? Вы должны скомпилировать объект регулярного выражения в обычном режиме, затем вы можете использовать
RegExp#test()
!
оператор with, чтобы узнать, есть совпадение или нет. И не используйтеg
флаг с регулярным выражением, используемым в.test()
.2. Я довольно новичок в программировании, я внес правку, будет ли это более встроенным? Я все еще не получаю правильный вывод?
Ответ №1:
Вы не можете инвертировать регулярное выражение, используя a !
в конструкторе. Просто попробуйте это:
array = ['hello', 'hello'];
array1 = ['hello', 'hello1'];
var arrayChar = new RegExp(/^[a-z',"s] $/i); // This means the string must contain only what is between brackets, at least 1 character.
function validateArrayChar(array,char) {
return array.every(function(element) {
return arrayChar.test(element);
});
}
console.log(validateArrayChar(array1, arrayChar)); // Will return false, at least one character is invalid
console.log(validateArrayChar(array, arrayChar)); // Will return true
Для ссылки на регулярные выражения: https://cheatography.com/davechild/cheat-sheets/regular-expressions /
Комментарии:
1. Спасибо за предупреждение, хотя, похоже, это не регистрирует сообщение при validateArrayChar(array1, arrayChar); ? Скопировал код точно в редактор.
2. Да, я обновил свой код и регулярное выражение, потому что я не помнил, что
every
ожидает, что все элементы вернут true, чтобы вернуть само true.3. Спасибо! Это сработало для проверки, и я просто создал дополнительную функцию для отображения сообщения в зависимости от логического значения. Приветствия.
4. Отлично. Я думаю, что оба ответа сработают, если вы чувствуете, что один из них сработал, пожалуйста, выберите его в качестве ответа, когда сможете.
Ответ №2:
Вы можете использовать функцию со стрелкой, чтобы сделать это более коротким способом.
Обновить.Я изменил регулярное выражение, потому что, если вы добавите символы подчеркивания в строку, тест вернется true
.
var array1 = ['hello', 'hello'];
var array2 = ['hello', 'hello1 'world"'];
var array3 = ['hello', 'Hello_'];
var arrayChar = new RegExp(/^[a-z0-9,'"s] $/i);
var validateArrayChar = (array, validator) => {
return array.every(element => validator.test(element));
}
console.log(validateArrayChar(array1, arrayChar));
console.log(validateArrayChar(array2, arrayChar));
console.log(validateArrayChar(array3, arrayChar));