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/