ruby on rails - regular - ¿Cómo puedo eliminar caracteres especiales?
ruby regular expressions examples (5)
Estoy practicando con Ruby y Regex para eliminar ciertos caracteres no deseados. Por ejemplo:
input = input.gsub(/<//?[^>]*>/, '''')
y para caracteres especiales, ejemplo ☻ o ™:
input = input.gsub(''&#'', '''')
Esto solo deja números, vale. Pero esto solo funciona si el usuario ingresa un carácter especial como un código, como este:
™
Mi pregunta: cómo puedo eliminar caracteres especiales si el usuario ingresa un carácter especial sin código, como este:
™ ☻
En primer lugar, creo que sería más fácil definir lo que constituye "entrada correcta" y eliminar todo lo demás. Por ejemplo:
input = input.gsub(/[^0-9A-Za-z]/, '''')
Si eso no es lo que quieres (quieres admitir alfabetos no latinos, etc.), entonces creo que debes hacer una lista de los glifos que quieres eliminar (como ™ o ☻), y eliminarlos uno a uno , ya que es difícil distinguir entre un carácter chino, árabe, etc. y una pictografía mediante programación.
Finalmente, es posible que desee normalizar su entrada mediante la conversión hacia o desde secuencias de escape de HTML.
Puede hacer coincidir todos los caracteres que desee y, a continuación, unirlos, así:
original = "aøbæcå"
stripped = original.scan(/[a-zA-Z]/).to_s
puts stripped
que saca "abc"
Puedes usar parameterize :
''@!#$%^&*()111''.parameterize
=> "111"
Si solo quería caracteres ASCII, puede usar:
original = "aøbauhrhræoeuacå"
cleaned = ""
original.each_byte { |x| cleaned << x unless x > 127 }
cleaned # => "abauhrhroeuac"
Una forma más fácil de hacerlo inspirada por la respuesta de Can Berk Güder es:
Para eliminar caracteres especiales:
input = input.gsub(//W/, '''')
Para mantener los caracteres de las palabras:
input = input.scan(//w/)
¡Al final la entrada es la misma! Pruébalo: http://rubular.com/