46 votes

Comment puis-je supprimer des caractères spéciaux?

Je suis pratiquant de Rubis et de regex pour supprimer certains caractères indésirables. Par exemple:

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

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

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

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

&#153;

Ma question: Comment je peux supprimer les caractères spéciaux si l'utilisateur saisit un caractère spécial sans code, comme ceci:

™ ☻

111voto

Can Berk Güder Points 39887

Tout d'abord, je pense qu'il pourrait être plus facile de définir ce qui constitue une "entrée correcte" et supprimer tout le reste. Par exemple:

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

Si ce n'est pas ce que vous voulez (vous voulez soutenir d'alphabets non latins, etc.), ensuite, je pense que vous devriez faire une liste des glyphes que vous souhaitez supprimer (comme ™ ou ☻), et de les supprimer un par un, car il est difficile de distinguer entre un Chinois, l'arabe, etc. caractère et d'un pictogramme représentant par programme.

Enfin, vous pouvez normaliser votre entrée par la conversion ou de l'HTML séquences d'échappement.

10voto

Matthew Schinckel Points 15596

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

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

8voto

Magnar Points 15142

Vous pouvez associer tous les caractères de votre choix, puis les associer, comme suit:

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

qui produit "abc"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X