Использование \W
или \w
для выбора или удаления только символов не будет работать.\w
означает AZ, az, 0-9 и "_":
irb(main):002:0> characters = (' ' .. "\x7e").to_a.join('')
=> " !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
irb(main):003:0> characters.gsub(/\W+/, '')
=> "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
Таким образом, разбор с использованием \W
сохраняет цифры и подчеркивания.
Если вы хотите сопоставить символыиспользуйте /[A-Za-z]+/
, или класс символов POSIX [:alpha:]
, то есть /[[:alpha:]]+/
, или /\p{ALPHA}/
.
Окончательный формат - это свойство Unicode для 'A' .. 'Z' + 'a'.. 'z' в ASCII и расширяется при работе с Unicode, поэтому, если у вас есть многобайтовые символы, вам, вероятно, следует использовать это.