web-dev-qa-db-ja.com

特殊文字を削除するにはどうすればよいですか?

私はRubyと正規表現で特定の不要な文字を削除するために練習しています。例えば:

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

特殊文字の場合、例☻または™:

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

これで数字だけが残ります。しかし、これは、ユーザーが次のようにコードとして特殊文字を入力した場合にのみ機能します。

&#153;

私の質問:ユーザーがコードなしで特殊文字を入力した場合、次のように特殊文字を削除する方法:

™ ☻
46
Yud

まず第一に、「正しい入力」を構成するものを定義し、他のすべてを削除する方が簡単だと思います。例えば:

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

それが望んでいない場合(非ラテン系アルファベットなどをサポートしたい場合)、削除したいグリフのリスト(™やlikeなど)を作成し、それらを1つずつ削除する必要があると思います、中国語、アラビア語などの文字と絵文字をプログラムで区別するのは難しいためです。

最後に、HTMLエスケープシーケンスへの変換またはHTMLエスケープシーケンスからの変換により、入力を正規化できます。

110
Can Berk Güder

ASCII文字だけが必要な場合は、次を使用できます。

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

parameterize を使用できます。

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

次のように、必要なすべての文字を一致させてから、それらを結合できます。

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

"abc"を出力します

8
Magnar

Can BerkGüderの答えに触発されたこれを行う簡単な方法は次のとおりです。

特殊文字を削除するには:

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

Wordの文字を保持するには:

input = input.scan(/\w/)

最後に入力は同じです!試してみてください: http://rubular.com/

5
Marco