Size: a a a

2021 November 19

AS

Alexander Sharapov in Evolution CMS
у акрониса вродь когда-то было что-то похожее
источник

SV

Serguei VeseloV in Evolution CMS
А кто пробовал экранировать пользовательские даные в javascript, чтобы их можно было мотом сунуть в регулярное выражение безопасно?
Например, есть у меня вот такая конструкция:
$('.display').DataTable().search('val1|val2', true, false);
Первый параметр функции search() является регулярным выражением.
Работает, так как val1|val2 является корректной регуляркой. Но если вместо val1 и val2 надо вставить данные из формы, а там может прийти нечто вроде '1.2[ m/s2 ]', то для корректной подстановки в регулярку надо заэкранировать точку, квадратные скобки и слеш.
Погуглил, нашел в основном вот такие решения:
function escapeRegex(string) {
   return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
},
но каким-то костылем выглядит. Может, есть какое-то более "натуральное" решение?
источник

AK

Andrey K in Evolution CMS
Интерфейсом мб решить? Тырчиков сделать, чтобы из них "собирать".
Но один фиг же, это js, браузерный код.
источник

A

Artem in Evolution CMS
Всем привет, а кто знает: eFilter работает с плагином MultiCategories ?
источник

E

EVO bot Лёшка in Evolution CMS
источник

SV

Serguei VeseloV in Evolution CMS
Значения заранее не угадать. Они пользователем их экселя на сайт заливаются. Много-много значений параметров разных.
В выводе параметры раскладываются по колонкам таблицы. И для фильтрации по колонкам создаются select-ы с множественным выбором.
Далее у самой библиотеки, которая красиво таблицу умеет на фронтенде сортировать и фильтровать, есть функция search(), кторая может в качестве искомой строки регулярное выражение принимать. (Множественные значения принимать не может). Соответственно, если я отметил несколько значений, их в эту функцию можно только в виде регулярки засунуть, склеив их через разделители |.   Теперь нужно, чтобы пользовательские данные не воспринялись как управляющие символы регулярки. Вот :)
источник

SB

Sasha Beep in Evolution CMS
Работает, параметр useMultiCategories вроде
источник

A

Artem in Evolution CMS
+ спасибо!
источник

A

Axenia in Evolution CMS
argalkin (170.91) увеличил карму sashabeep (959.07)
источник

AA

Am Ambrion in Evolution CMS
Нельзя экранировать пользовательские данные в JS так чтобы их куда-либо пихать "безопасно". Это не про JS.
Код JS можно без проблем модифицировать на стороне клиента и пересылать на сервер, всё остальные проверки должны быть только на стороне сервера. В лучшем случае код JS можно только подготовить для сервера или показать пользователю ошибочность выполненных действий.
источник

SV

Serguei VeseloV in Evolution CMS
Но здесь опасность только в том, что данные в браузере не отсортируются, на сервер ничего не пересылается с этой страницы.
источник

SB

Sasha Beep in Evolution CMS
Ох не стал бы я так делать
источник

SB

Sasha Beep in Evolution CMS
очень уж похоже на @eval($_POST)
источник

SV

Serguei VeseloV in Evolution CMS
Я по вашему совету немного с DataTable  разобрался. Делаю нечто такое:
https://datatables.net/examples/api/regex.html
Только вместо input-ов у меня будут select-ы с multiple-значениями, в select2 преобразованные.
И вот таким вызовом решил воспользоваться, как здесь написали:
https://www.datatables.net/forums/discussion/52451/search-with-multiples
источник

AA

Am Ambrion in Evolution CMS
Тогда не стоит говорить про пихание этих данных куда-либо безопасно. Видимо, не правильно понял задачу, т.к. нет полных вводных. Раз никуда не отсылаются данные кроме этой страницы, то можно воротить что угодно это же  JS. ((%
источник

SV

Serguei VeseloV in Evolution CMS
Да не похоже. Ну пусть на стороне клиента в браузере чего угодно в javascript пихают. Данные уже заранее на сервере собраны и отданы на страницу, осталось ее только фильтрануть красиво.
источник

SV

Serguei VeseloV in Evolution CMS
Ну да, я про то же. "Безопасно"  я имел в виду не в плане того, что поломают что-то, а в плане что из-за какого-то значения разломается регулярка и расползется таблица, и не более того.
источник

AA

Am Ambrion in Evolution CMS
Понял.
У меня таблицы, обычно, такие что там только ajax использую и вывожу только часть данных, а фильтры делаю обычные и посылаю POST для выдачи новых данных. Когда данных много, то проще POST чем фильтр в браузере, т.к. браузер загибается еще на стадии загрузки. ((%
источник

SV

Serguei VeseloV in Evolution CMS
Данных не очень много, на странице 100-200 строк в таблице, больше не будет.
источник

SB

Sasha Beep in Evolution CMS
Последний раз когда я использовал datatables это было для очень странной чепухи. Таблица сортового металла, в которой есть столбец "Склад". И фильтр по столбцу, котрый меняет только город в этом столбце и пишет в следующем столбце "в наличии"
источник