Quiero crear una expresión regular que elimine todos los caracteres que no sean alfanuméricos pero mantenga los espacios. Esto es para limpiar la entrada de búsqueda antes de que llegue a la base de datos. Esto es lo que tengo hasta ahora:
@search_query = @search_query.gsub(/[^0-9a-z]/i, '')El problema aquí es que elimina todos los espacios. ¿Soluciones sobre cómo retener espacios?
                    
                        ruby-on-rails
                                ruby
                                regex
                                ruby-on-rails-3
                                
                    
                    
                        La salida
fuente
                
                fuente

Respuestas:
Agregue espacios al grupo de caracteres negado:
fuente
@search_query.gsub!(/[^0-9a-z ]/i, '')\sno\\sEn este caso, usaría el método bang (¡gsub! En lugar de gsub) para limpiar la entrada de forma permanente.
Esto evita una situación en la que @seach_query se usa en otra parte del código sin limpiarlo.
fuente
Hubiera utilizado el enfoque de inclusión. En lugar de excluir todo menos los números, solo incluiría números. P.ej
fuente
Quizás esto funcione para tal caso:
fuente
Una mejor respuesta (al menos en rubí) es:
fuente