web-dev-qa-db-fra.com

Comment supprimer des caractères spéciaux?

Je m'entraîne 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 code, comme ceci:

&#153;

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

™ ☻
46
Yud

Tout d'abord, je pense qu'il pourrait être plus facile de définir ce qui constitue une "entrée correcte" et de supprimer tout le reste. 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 je pense que 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 souhaiterez peut-être normaliser votre entrée en effectuant une conversion vers ou depuis des séquences d'échappement HTML.

110
Can Berk Güder

Si vous vouliez juste ASCII caractères, alors vous pouvez utiliser:

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

Vous pouvez utiliser paramétrer :

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

Vous pouvez faire correspondre tous les personnages que vous voulez, puis les réunir, comme ceci:

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

qui génère "abc"

8
Magnar

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 conserver les caractères Word:

input = input.scan(/\w/)

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

5
Marco