2016-08-12 17 views
5

Tôi đang cố gắng thay thế tất cả các ký tự chữ và số của một email có ký tự '#' bằng cách sử dụng phương thức gsub nhưng Ruby đang chèn dấu gạch chéo ngược trước ký tự '@'.Thay thế gsub không đúng

ví dụ:

"[email protected]".gsub(/[a-z0-9]/, "#") lợi nhuận "###\#@###.###" thay vì "####@###.###".

+0

Bạn cũng có thể sử dụng '\ w' metacharater:' "[email protected]" .gsub (/ \ w /, "#") ' – orde

+0

@ orde '\ w' và' [a-z0-9] 'là các bộ ký tự khác nhau. – mudasobwa

+1

Lưu ý rằng dấu chéo ngược không được chèn trước '@', nhưng trước '#' trước '@'. – Stefan

Trả lời

8

Nó trả "####@###.###" như mong đợi, cố gắng:

puts "[email protected]".gsub(/[a-z0-9]/, "#") 

Những gì bạn nhìn thấy trong IRB/Pry là công tác phòng chống #@ được hiểu là chuỗi suy.

Vui lòng tham khảo nhận xét rất có giá trị của @Stefan bên dưới.

+2

Kết quả chính xác hơn về [Kiểm tra chuỗi #] (http://ruby-doc.org/core-2.3.1/String.html#method-i-inspect). Một '#' được theo sau bởi '$', '@' hoặc '{' sẽ được thoát. – Stefan

Các vấn đề liên quan