Как удалить специальные символы?
Я тренируюсь с Ruby и regex для удаления некоторых нежелательных символов. Например:
input = input.gsub(/<\/?[^>]*>/, '')
и для специальных символов, например, ☻ или ™:
input = input.gsub('&#', '')
Это оставляет только числа, нормально. Но это работает только в том случае, если пользователь вводит специальный символ в качестве кода, например:
™
Мой вопрос:
Как я могу удалить специальные символы, если пользователь вводит специальный символ без кода, например:
™ ☻
Ответы
Ответ 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/