2012-08-16 40 views
24

Tengo un formulario que envía el contenido de un campo de texto a mi aplicación Rails y Tengo que generar una expresión regular de esta cadena.¿Escape los caracteres especiales en RegEx?

me trataron así:

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

En general esto está funcionando, pero si los soportes o caracteres especiales están contenidos en la cadena, este método no funcionará.

No quiero que Rails se ocupe de los caracteres. Deberían escaparse automáticamente.

lo probé así:

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

pero esto no está funcionando bien.

Respuesta

35

Debe utilizar 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 Escapa caracteres especiales:

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