Подтвердить что ты не робот

Как удалить специальные символы?

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

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

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

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

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

&#153;

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

™ ☻
4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Если вам просто нужны символы ASCII, вы можете использовать:

original = "aøbauhrhræoeuacå" 
cleaned = ""
original.each_byte { |x|  cleaned << x unless x > 127   }
cleaned   # => "abauhrhroeuac"

Ответ 3

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

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

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

Ответ 4

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

'@!#$%^&*()111'.parameterize
 => "111" 

Ответ 5

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

Чтобы удалить специальные символы:

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

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

input = input.scan(/\w/)

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