Питання Уникнути спеціальних символів у RegEx?


У мене є форма, яка надсилає вміст текстового поля до моєї програми Rails і Я повинен створити регулярний вираз цього рядка.

Я спробував це так:

regex = /#{params[:text]}/

Загалом, це працює, але якщо в рядку містяться дужки або спеціальні символи, цей метод не буде працювати.

Я не хочу, щоб Rails піклувався про символи. Їх слід врятувати автоматично.

Я спробував це так:

/\Q#{params[:text]}\E/

але це також не працює.


27
2017-08-16 14:44


походження




Відповіді:


Ви повинні використовувати Regexp.escape

regex = /#{Regexp.escape(params[:text])}/
# in rails models/controllers with mongoid use:
# ::Regexp.escape(params[:text]) instead. ([more info][2])

38
2017-08-16 14:54





Regexp.escape уникає спеціальних символів:

params[:text] = "[foo-bar]"
Regexp.new(Regexp.escape(params[:text]))
# => /\[foo\-bar\]/

8
2017-08-16 14:56