Я возился с MongoDB, и я наткнулся на кое-что. Я хотел бы сделать простое приложение, в котором пользователь может искать все документы в коллекции, получая документы, в которых ключ username
содержит определенное введенное пользователем значение.
Для реализации «содержит» его появляется можно использовать регулярное выражение. Это прекрасно работает, но как я могу преобразовать пользовательский ввод в регулярное выражение? Проблема в том, что просто делаешь ...
new RegExp(value);
... не работает из-за специальных символов (например, (
, [
и т. Д.). Это означает, что пользователь не может выполнить запрос, содержащий (
таким образом.
Я думал, что спасение от всего сделает работу:
new RegExp(value.replace(/./g, function(x) {
return "\\" + x;
});
... но это не так, потому что некоторые экранированные символы также являются особыми (например, \d
), поэтому не специальные символы становятся специальными.
Я немного растерялся, как я мог превратить введенное пользователем значение в регулярное выражение. Или, возможно, есть лучший способ сделать запрос для всех документов, ключ которых содержит определенное значение, введенное пользователем?