2012-08-16 20 views
24

Ho un modulo, che invia il contenuto di un campo di testo alla mia applicazione Rails e Devo generare un'espressione regolare di questa stringa.Escape char speciali in RegEx?

ho provato in questo modo:

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

In generale questo sta lavorando, ma se staffe o caratteri speciali sono contenuti nella stringa, questo metodo non funzionerà.

Non voglio che Rails si prenda cura dei caratteri. Dovrebbero essere sfuggiti automaticamente.

ho provato in questo modo:

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

ma questo non sta funzionando neanche.

risposta

35

Si dovrebbe usare 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 sfugge caratteri speciali:

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