it-swarm.com.ru

Как убрать не буквенно-цифровые символы из строки и оставить пробелы?

Я хочу создать регулярное выражение, которое удаляет все символы, не являющиеся символами алфавита, но сохраняет пробелы. Это необходимо для очистки входных данных поиска, прежде чем они попадут в базу данных. Вот что у меня так далеко:

@search_query = @search_query.gsub(/[^0-9a-z]/i, '')

Проблема здесь в том, что он удаляет все пробелы. Решения о том, как сохранить пространство?

90
TheExit

Добавьте пробелы в отрицательную группу символов:

@search_query = @search_query.gsub(/[^0-9a-z ]/i, '')
172
jwueller

В этом случае я бы использовал метод bang (gsub! Вместо gsub) для постоянной очистки ввода.

#permanently filter all non-alphanumeric characters, except _
@search_query.gsub!(/\W/,'')

Это позволяет избежать ситуации, когда @seach_query используется в другом месте кода без его очистки.

5
nvugteveen

Я бы использовал подход включения. Вместо того, чтобы исключать все, кроме цифр, я бы включил только цифры. Например.

@search_query.scan(/[\da-z\s]/i).join
3
Vadym Tyemirov

Может быть, это будет работать для такого случая:

# do not replace any Word characters and spaces
@search_query = @search_query.gsub(/[^\w ]/g, '')
0
piton4eg