Chcę utworzyć wyrażenie regularne, które usuwa wszystkie znaki inne niż alfanumeryczne, ale zachowuje spacje. Ma to na celu wyczyszczenie danych wejściowych wyszukiwania, zanim trafią one do bazy danych. Oto, co mam do tej pory:
@search_query = @search_query.gsub(/[^0-9a-z]/i, '')
Problem polega na tym, że usuwa wszystkie spacje. Rozwiązania, jak zachować przestrzeń?
ruby-on-rails
ruby
regex
ruby-on-rails-3
Wyjście
źródło
źródło
Odpowiedzi:
Dodaj spacje do zanegowanej grupy znaków:
źródło
@search_query.gsub!(/[^0-9a-z ]/i, '')
\s
nie\\s
W tym przypadku użyłbym metody bang (gsub! Zamiast gsub), aby trwale wyczyścić dane wejściowe.
Pozwala to uniknąć sytuacji, w której @seach_query jest używane w innym miejscu kodu bez jego czyszczenia.
źródło
Zastosowałbym podejście włączające. Zamiast wykluczyć wszystkie oprócz liczb, podałbym tylko liczby. Na przykład
źródło
Może to zadziała w takim przypadku:
źródło
Lepszą odpowiedzią (przynajmniej w języku rubinowym) jest:
źródło