Tengo un campo de entrada de cadena en un formulario. Obtengo ese valor en params hash. ¿Cómo debo eliminar todos los caracteres excepto los alfabetos y los números de esa cadena?Eliminar todos los caracteres excepto los alfabetos y los números de una cadena de Ruby
Respuesta
Sólo para recordar a la gente buena 'ol tr
:
asdf.tr('^A-Za-z0-9', '')
que está encontrando el complemento de los rangos de caracteres y la traducción de los caracteres a ''.
tenía curiosidad si el uso de una clase \W
carácter era más rápido que los rangos y gsub
vs tr
:
require 'benchmark'
asdf = [('A'..'z').to_a, ('0'..'9').to_a].join
puts asdf
puts asdf.tr( '^A-Za-z0-9', '')
puts asdf.gsub(/[\W_]+/, '')
puts asdf.gsub(/\W+/, '')
puts asdf.gsub(/\W/, '')
puts asdf.gsub(/[^A-Za-z0-9]+/, '')
puts asdf.scan(/[a-z\d]/i).join
n = 100_000
Benchmark.bm(7) do |x|
x.report("tr:") { n.times do; asdf.tr('^A-Za-z0-9', ''); end }
x.report("gsub1:") { n.times do; asdf.gsub(/[\W_]+/, ''); end }
x.report("gsub2:") { n.times do; asdf.gsub(/\W+/, ''); end }
x.report("gsub3:") { n.times do; asdf.gsub(/\W/, ''); end }
x.report("gsub4:") { n.times do; asdf.gsub(/[^A-Za-z0-9]+/, ''); end }
x.report("scan:") { n.times do; asdf.scan(/[a-z\d]/i).join; end }
end
>> ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
>> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
>> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
>> ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
>> ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
>> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
>> ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
>> user system total real
>> tr: 0.560000 0.000000 0.560000 ( 0.557883)
>> gsub1: 0.510000 0.000000 0.510000 ( 0.513244)
>> gsub2: 0.820000 0.000000 0.820000 ( 0.823816)
>> gsub3: 0.960000 0.000000 0.960000 ( 0.955848)
>> gsub4: 0.900000 0.000000 0.900000 ( 0.902166)
>> scan: 5.630000 0.010000 5.640000 ( 5.630990)
Se puede ver un par de los patrones no están alcanzando el '_', que forma parte de \w
, y, como resultado, no cumple con la solicitud del OP.
=> '^/how/now#(Brown) Cow'.gsub /\W/, '' # or /[\W_]/
=> "hownowBrownCow"
... actualizado basado en los comentarios ...
+1 para HNBC. :) –
No elimina los guiones bajos, lo que puede ser algo bueno. – steenslag
O simplemente puede usar '.gsub/\ W /, ''', ya que \ W coincide con cualquier carácter que no sea de palabra (mientras \ w coincide con los caracteres de las palabras). –
Sin una expresión regular:
garbage = 'ab_c<>?AB [email protected]#123'
puts garbage.delete("^a-zA-Z0-9") #=> abcABC123
En la que el '^' niega todo después de ella.
Guau, ¿desde cuándo 'borrar' puede'^'? No lo veo en mis documentos 1.9.2. – Nakilon
algunos votos a favor para compensar por su consejo útil – apneadiving
- 1. RegEx para reemplazar todos los caracteres, excepto los números
- 2. iphone sdk - Elimine todos los números, excepto los caracteres a-z de una cadena
- 3. expresión regular todos los caracteres excepto último
- 4. Eliminar todos los caracteres especiales de una cadena en R?
- 5. Cómo eliminar todos los caracteres de una cadena
- 6. UTF-8 Cadena eliminar todos los caracteres invisibles excepto una línea nueva
- 7. Reemplazar todos los caracteres, excepto letras, números, espacios y guiones bajos
- 8. Eliminar todos los caracteres no ASCII de la cadena
- 9. Regex para que coincida con todos los caracteres excepto letras y números
- 10. Regex para eliminar todos los caracteres especiales de la cadena?
- 11. Cómo eliminar todos los caracteres que no sean ASCII de una cadena en Ruby
- 12. PHP eliminar todos los caracteres antes de cadena específica
- 13. cadena de formato, eliminar los caracteres iniciales
- 14. Ruby, elimina los últimos N caracteres de una cadena?
- 15. ¿Cómo se eliminan todos los caracteres alfabéticos de una cadena?
- 16. Cómo reemplazar todos los caracteres en una cadena de entrada de usuario, excepto uno
- 17. Incrementando los alfabetos
- 18. Cómo dividir una cadena en Ruby y obtener todos los elementos, excepto el primero?
- 19. Eliminar todos los "caracteres de palabra" no de una cadena en Java, dejando caracteres acentuados?
- 20. jQuery eliminar los caracteres especiales de la cadena y más
- 21. ¿Cómo elimino todos los caracteres no alfanuméricos de una cadena excepto el guión?
- 22. ¿Cómo eliminar todos los caracteres no alfanuméricos y sin espacio de una cadena en PHP?
- 23. C# expresión regular para eliminar todos los caracteres alfabéticos y numéricos de una cadena?
- 24. Suma de todos los números
- 25. Ruby, eliminar los valores nulos de una cadena
- 26. preg_replace para eliminar los caracteres no imprimibles parece eliminar todos los caracteres extraños
- 27. ProgressDialog - cómo eliminar los números
- 28. Ruby: incrementa todos los enteros en una cadena por +1
- 29. Python Eliminar los últimos 3 caracteres de una cadena
- 30. Javascript regex, reemplace todos los caracteres que no sean números
Para ayudarle en su viaje: http://www.rubular.com/ – apneadiving