Comment supprimer des caractères spéciaux?

Je pratique avec Ruby et regex pour supprimer certains caractères indésirables. Par exemple:

input = input.gsub(/]*>/, '') 

et pour les caractères spéciaux, exemple ☻ ou ™:

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

Cela ne laisse que des chiffres, ok. Mais cela ne fonctionne que si l’utilisateur entre un caractère spécial comme un code, comme ceci:

  

Ma question: Comment puis-je supprimer des caractères spéciaux si l’utilisateur entre un caractère spécial sans code, comme ceci:

 ™ ☻ 

Tout d’abord, je pense qu’il serait plus facile de définir ce qui constitue une “entrée correcte” et de supprimer tout le rest. Par exemple:

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

Si ce n’est pas ce que vous voulez (vous voulez prendre en charge les alphabets non latins, etc.), alors vous devriez faire une liste des glyphes que vous souhaitez supprimer (comme ™ ou ☻), et les supprimer un par un , car il est difficile de faire la distinction entre un caractère chinois, arabe, etc. et un pictogramme par programmation.

Enfin, vous voudrez peut-être normaliser votre entrée en convertissant en ou à partir de séquences d’échappement HTML.

Si vous ne voulez que des caractères ASCII, vous pouvez utiliser:

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

Vous pouvez faire correspondre tous les caractères souhaités, puis les joindre, comme ceci:

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

qui sort "abc"

Vous pouvez utiliser le paramétrage :

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

Un moyen plus simple de le faire inspiré par la réponse de Can Berk Güder est:

Pour supprimer des caractères spéciaux:

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

Afin de garder des caractères verbaux:

 input = input.scan(/\w/) 

À la fin, l’entrée est la même! Essayez-le sur: http://rubular.com/