Eu quero criar um regex que remove todos os caracteres não-alfanuméricos, mas mantém espaços. Isso é para limpar a entrada de pesquisa antes de atingir o banco de dados. Aqui está o que eu tenho até agora:
@search_query = @search_query.gsub(/[^0-9a-z]/i, "")
Problema aqui é que remove todos os espaços. Soluções sobre como reter espaços?
Respostas:
158 para resposta № 1Adicione espaços ao grupo de caracteres negados:
@search_query = @search_query.gsub(/[^0-9a-z ]/i, "")
5 para resposta № 2
Neste caso, eu usaria o método bang (gsub! Em vez de gsub) para limpar a entrada permanentemente.
#permanently filter all non-alphanumeric characters, except _
@search_query.gsub!(/W/,"")
Isso evita uma situação em que @seach_query é usado em outro lugar no código sem limpá-lo.
3 para resposta № 3
Eu teria usado a abordagem de inclusão. Em vez de excluir todos os números, só incluí números. Por exemplo.
@search_query.scan(/[da-zs]/i).join
-3 para resposta № 4
Uma resposta melhor (pelo menos em rubi) é:
@search_query.gsub!(/^(w|s*)/,"")