Я пытался использовать gsub
для удаления несловных символов в строке в приложении rails. Я использовал следующий код:
somestring.gsub(/[\W]/i, '') #=> ""
но на самом деле это неверно, он также удалит букву k
. Правильный должен быть:
somestring.gsub(/\W/i, '') #=> "kkk"
Но моя проблема в том, что модульный тест контроллера рельсов, который содержит приведенный выше код с использованием rspec, не работает, модульный тест фактически проходит. Поэтому я создал довольно экстремальный тестовый пример в rspec.
it "test this gsub" do
'kkk'.gsub(/[\W]/i, '').should == 'kkk'
end
приведенный выше тестовый пример должен завершиться ошибкой, но на самом деле он проходит. В чем проблема? Почему тест пройдет?
/[\W]/i
является полностью допустимым регулярным выражением для этой задачи. Скобки в этом случае не нужны, но они ничему не помешают. - person KL-7   schedule 27.04.2012irb
?"kkk".gsub(..)
работает как надо, результат ккк, значит тест пройден. Какой результат вы ожидаете? - person Casper   schedule 27.04.2012'kkk'.gsub(/[\W]/i, '')
я получаю""
. Для сравнения, запуск'kkk'.gsub(/\W/i, '')
возвращает"kkk"
. - person Andrew Marshall   schedule 27.04.2012k
— символ слова. А\W
соответствует символам, не являющимся словами. В моей установке Ruby я получаю"kkk"
при запуске вirb
. - person Casper   schedule 27.04.2012"kkk"
, как и ожидалось. - person Andrew Marshall   schedule 27.04.2012/i
. Вам действительно нужен флаг игнорирования регистра для символов, отличных от слов? - person KL-7   schedule 27.04.2012'jklfds'.gsub(/[\W]/i, '')
дает"jlfd"
. Это регулярное выражение, кажется, действительно сбивает Ruby с толку. - person Andrew Marshall   schedule 27.04.2012