Проверять только буквенные символы, одинарные / двойные кавычки, пробел и запятую в массиве в Javascript

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