Как я могу удалить специальные символы? - PullRequest
46 голосов
/ 10 апреля 2009

Я практикуюсь с Ruby и regex, чтобы удалить некоторые нежелательные символы. Например:

input = input.gsub(/<\/?[^>]*>/, '')

и для специальных символов, например, ☻ или ™:

input = input.gsub('&#', '')

Это оставляет только цифры, хорошо. Но это работает, только если пользователь вводит специальный символ в виде кода, например:

&#153;

Мой вопрос: Как я могу удалить специальные символы, если пользователь вводит специальный символ без кода, например:

™ ☻

Ответы [ 5 ]

109 голосов
/ 10 апреля 2009

Прежде всего, я думаю, что было бы легче определить, что составляет «правильный ввод», и удалить все остальное. Например:

input = input.gsub(/[^0-9A-Za-z]/, '')

Если это не то, что вам нужно (вы хотите поддерживать нелатинские алфавиты и т. Д.), То, я думаю, вам следует составить список глифов, которые вы хотите удалить (например, ™ или ☻), и удалить их один- один за другим, так как программно трудно различить китайский, арабский и т. д. символ и пиктограмму.

Наконец, вы можете нормализовать ваш ввод путем преобразования в или из escape-последовательностей HTML.

10 голосов
/ 10 апреля 2009

Если вы просто хотели символы ASCII, тогда вы можете использовать:

original = "aøbauhrhræoeuacå" 
cleaned = ""
original.each_byte { |x|  cleaned << x unless x > 127   }
cleaned   # => "abauhrhroeuac"
8 голосов
/ 14 октября 2014

Вы можете использовать параметризация :

'@!#$%^&*()111'.parameterize
 => "111" 
8 голосов
/ 10 апреля 2009

Вы можете сопоставить все символы, которые вы хотите, а затем соединить их вместе, как это:

original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped

который выводит "abc"

5 голосов
/ 20 ноября 2014

Более простой способ сделать это, вдохновленный ответом Can Berk Güder:

Для удаления специальных символов:

input = input.gsub(/\W/, '')

Чтобы сохранить символы слова:

input = input.scan(/\w/)

В конце ввод одинаков! Попробуйте: http://rubular.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...