#javascript #string #object
#javascript #строка #объект
Вопрос:
как я могу изменить следующую строку на объект?
"password: {
minLength: 8, // some comments
maxLength: 24,
strong: (value) => /.*[^0-9] .*[0-9] .*|.*[0-9] .*[^0-9] .*/.test(value),
},"
Комментарии:
1. Откуда вы берете эту строку? Вы можете использовать
eval
, но это безопасно, только если вы управляете этой строкой, а не пользователем.
Ответ №1:
Если — и только если — эта строка находится под вашим контролем, а не пользователя вашего приложения, вы можете использовать eval
. Обратите внимание, что необходимы некоторые изменения, поскольку содержимое строки не представляет допустимый JavaScript, похоже, что это объект со password
свойством, но окружающие фигурные скобки отсутствуют.
Итак, вот как это может работать:
let input = `password: {
minLength: 8, // some comments
maxLength: 24,
strong: (value) => /.*[^0-9] .*[0-9] .*|.*[0-9] .*[^0-9] .*/.test(value),
},`;
// Add braces to make it a valid object literal, and
// add parentheses to make it into an expression:
let result = eval(`({${input}})`);
console.log(result);
ПРИМЕЧАНИЕ: вы не можете использовать JSON.parse
здесь, так как эта строка не является допустимым JSON, и JSON не поддерживает синтаксис функции.
Однако, если строка предоставлена пользователем, вам не следует использовать eval
. Вы можете даже задаться вопросом, следует ли вам поддерживать синтаксический анализ такого пользовательского ввода, поскольку он может выполнить код, который вы на самом деле не хотите, чтобы он выполнялся.