Прежде всего, я думаю, что было бы легче определить, что составляет «правильный ввод», и удалить все остальное. Например:
input = input.gsub(/[^0-9A-Za-z]/, '')
Если это не то, что вам нужно (вы хотите поддерживать нелатинские алфавиты и т. Д.), То, я думаю, вам следует составить список глифов, которые вы хотите удалить (например, ™ или ☻), и удалить их один- один за другим, так как программно трудно различить китайский, арабский и т. д. символ и пиктограмму.
Наконец, вы можете нормализовать ваш ввод путем преобразования в или из escape-последовательностей HTML.