2009-04-10 102 views
44

Tôi đang luyện tập với Ruby và regex để xóa một số ký tự không mong muốn. Ví dụ:Làm cách nào để xóa các ký tự đặc biệt?

input = input.gsub(/<\/?[^>]*>/, '') 

và ký tự đặc biệt, ví dụ ☻ hoặc ™:

input = input.gsub('&#', '') 

này khiến chỉ số, ok. Nhưng điều này chỉ hoạt động nếu người dùng nhập vào một ký tự đặc biệt như một mã số, như thế này:

&#153; 

Câu hỏi của tôi: Làm thế nào tôi có thể xóa ký tự đặc biệt nếu người dùng nhập vào một ký tự đặc biệt mà không cần mã, như thế này:

™ ☻ 

Trả lời

104

Trước hết, tôi nghĩ có thể dễ dàng xác định những gì cấu thành "đầu vào chính xác" và xóa mọi thứ khác. Ví dụ:

input = input.gsub(/[^0-9A-Za-z]/, '') 

Nếu đó không phải là những gì bạn muốn (bạn muốn hỗ trợ bảng chữ cái phi latin, vv), sau đó tôi nghĩ rằng bạn nên thực hiện một danh sách các glyphs bạn muốn loại bỏ (như ™ hoặc ☻), và loại bỏ từng cái một, vì khó phân biệt giữa ký tự Trung Quốc, Ả Rập, v.v. và một chữ tượng hình lập trình.

Cuối cùng, bạn có thể muốn bình thường hóa đầu vào của mình bằng cách chuyển đổi hoặc từ chuỗi thoát HTML.

+0

Cảm ơn, tôi nghĩ rằng việc tạo danh sách các ký tự được cho phép sẽ dễ dàng hơn. – Yud

+0

Cảm ơn !! Tôi đã sử dụng 'input = input.gsub (/ [^ 0-9A-Za-z] /, '')' để giữ chuỗi như vậy. Nó cung cấp cho tôi một số không gian thêm tại vị trí của những ký tự đặc biệt này. – Surya

8

bạn có thể phù hợp với tất cả các ký tự mà bạn muốn, và sau đó tham gia cùng họ với nhau, như thế này:

original = "aøbæcå" 
stripped = original.scan(/[a-zA-Z]/).to_s 
puts stripped 

có kết quả đầu ra là "abc"

10

Nếu bạn chỉ muốn các ký tự ASCII, sau đó bạn có thể sử dụng:

original = "aøbauhrhræoeuacå" 
cleaned = "" 
original.each_byte { |x| cleaned << x unless x > 127 } 
cleaned # => "abauhrhroeuac" 
7

Bạn có thể sử dụng parameterize:

'@!#$%^&*()111'.parameterize 
=> "111" 
+0

Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích về cách mã của bạn hoạt động và cách giải quyết vấn đề của OP. Nhiều SO áp phích là người mới và sẽ không hiểu mã bạn đã đăng. –

+0

Tài liệu ở đó: http://apidock.com/rails/String/parameterize –

+0

Gotcha với tham số hóa: Nó để lại dấu gạch ngang. Tôi sử dụng 'something-here'.underscore.parameterize để tính toán nó. – emptywalls

3

Một cách dễ dàng hơn để làm điều này inspirated bởi Can Berk Güder Câu trả lời là:

Để xóa các ký tự đặc biệt:

input = input.gsub(/\W/, '') 

Để giữ cho các nhân vật từ:

input = input.scan(/\w/) 

Tại đầu vào cuối cùng là giống nhau! Hãy dùng thử: http://rubular.com/

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