Tôi đã cố gắng sử dụng gsub
để xóa các ký tự không phải từ trong một chuỗi trong ứng dụng đường ray. Tôi đã sử dụng mã sau:Sự kỳ lạ với gsub
somestring.gsub(/[\W]/i, '') #=> ""
nhưng thực sự không chính xác, nó cũng sẽ xóa thư k
. Giá trị chính xác phải là:
somestring.gsub(/\W/i, '') #=> "kkk"
Nhưng vấn đề của tôi là kiểm tra đơn vị bộ điều khiển ray có chứa mã trên sử dụng rspec không hoạt động, kiểm tra đơn vị thực sự chuyển. Vì vậy, tôi đã tạo một trường hợp thử nghiệm khá khắc nghiệt trong rspec
it "test this gsub" do
'kkk'.gsub(/[\W]/i, '').should == 'kkk'
end
trường hợp kiểm tra ở trên sẽ không thành công, nhưng nó thực sự chuyển. vấn đề ở đây là gì? Tại sao vượt qua bài kiểm tra?
Tại sao thử nghiệm không thành công? '/ [\ W]/i' là một regexp hoàn toàn hợp lệ cho tác vụ đó theo như tôi thấy. Chân đế là không cần thiết trong trường hợp đó, nhưng nó không làm tổn thương bất cứ điều gì. –
Bạn có thực sự thử regexps trong 'irb' không? '" kkk ".gsub (..)' nó hoạt động giống như nó nên, và kết quả là "kkk", vì vậy bài kiểm tra đã trôi qua. Kết quả bạn đang mong đợi là gì? – Casper
@Casper Trên thực tế, khi chạy ''kkk'.gsub (/ [\ W]/i,' ')' Tôi nhận được '" "'. Trong khi đó, chạy ''kkk'.gsub (/ \ W/i,' ')' trả về '" kkk "'. –