2009-02-06 22 views
10

Có rất similar question rồi. Một trong các giải pháp sử dụng mã như thế này:Xóa dấu trọng âm/dấu phụ từ chuỗi trong khi vẫn giữ các ký tự đặc biệt khác (đã thử mb_chars.normalize và iconv)

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s 

Những điều cần làm, cho đến khi bạn nhận thấy nó cũng loại bỏ dấu cách, dấu chấm, dấu gạch ngang và những người khác biết.

Tôi không thực sự chắc chắn cách mã đầu tiên hoạt động, nhưng có thể tạo mã vạch chỉ dấu trọng âm không? Hoặc ít nhất được đưa ra một danh sách các ký tự để bảo tồn? kiến thức của tôi về regexps là nhỏ, nhưng tôi đã cố gắng (vô ích):

/[^\-x00-\x7F]/n # So it would leave the dash alone 

tôi sắp làm điều gì đó như thế này:

string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub 
    (/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s 

tàn bạo? Có ...

Tôi cũng đã thử:

iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1 
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é" 

Trợ giúp xin vui lòng?

Trả lời

11

nó cũng loại bỏ dấu cách, dấu chấm, dấu gạch ngang và ai biết điều gì khác.

Không được.

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s 

Bạn đã nhập sai, phải có dấu gạch chéo ngược trước x00, để chỉ ký tự NUL.

/[^\-x00-\x7F]/n # So it would leave the dash alone 

Bạn đã đặt ‘-’ giữa ‘\’ và ‘x’, sẽ ngắt tham chiếu đến ký tự rỗng và do đó phá vỡ phạm vi.

+0

Chúa ơi ... xin hãy tha thứ cho tôi :) Cảm ơn! – Ivan

+0

vâng, tất cả chúng ta đã có một tải tẻ nhạt của sự nhầm lẫn gỡ lỗi gây ra bởi các lỗi chính tả đơn giản nhất! – bobince

+1

Còn khoảng trống thì sao? nó không giữ được khoảng trắng. –

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