ruby регулярное выражение - PullRequest
       1

ruby регулярное выражение

0 голосов
/ 19 ноября 2018

Для моего проекта ruby ​​on rails у меня есть модель с именем message, которая имеет поле to. Я хочу реализовать поиск по шаблону, чтобы, например, %545 отображал все сообщения, заканчивающиеся на 545, 545% отображал все числа, начинающиеся с 545, %545% отображал все сообщения, включая 545.

У меня есть запрос типа Message.where("to like ?", str), где str - строка для сопоставления, например, %545, %545%, 545% ... и т.д..

Все работает, но меня беспокоит атака SQL-инъекцией. Поэтому я хочу сделать регулярное выражение для str, чтобы оно пропускало только % и числа. Поэтому я хочу, чтобы строки вроде %545, %545%, 545% проходили, а не abc, %545a, a545%, %54a5% проходили.

Я пробовал str.scan(/.*?(\d+%)/), но это не работает.

Спасибо.

1 Ответ

0 голосов
/ 19 ноября 2018

Вы правильно используете заполнители, поэтому вы уже защищены от атак с использованием SQL-инъекций.Rails будет избегать любых небезопасных символов в шаблоне;вам не нужно предпринимать никаких дальнейших действий.

Если вы все еще хотите удалить символы, отличные от цифр и %, вы можете использовать метод String#delete Руби:

str.delete('^1-9%')

Аргумент '^1-9%' означает «Удалить все символы, которые не 1 до 9 или %».(Примечание: здесь вы не можете использовать \d, потому что #delete не понимает метасимволы регулярных выражений.)

См. https://ruby -doc.org / core-2.5.3 / String.HTML # метод-я-удаление .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...