2012-08-16 28 views
24

Mam formularz, który wysyła zawartość pola tekstowego do mojej aplikacji Rails i Muszę wygenerować wyrażenie regularne tego ciągu.Znaki specjalne Escape w RegEx?

Próbowałem to tak:

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

W ogóle to działa, ale jeśli wsporniki lub znaki specjalne są zawarte w ciągu, ta metoda nie zadziała.

Nie chcę, aby Railsy dbały o znaki. Powinny one zostać automatycznie usunięte.

Próbowałem to tak:

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

ale to nie działa albo.

Odpowiedz

35

Należy użyć Regexp.escape

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

Regexp.escape ucieka znaków specjalnych:

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