Trong trường hợp bạn phải so sánh UTF-8 chuỗi bỏ qua trường hợp:
>> str1 = "Мария"
=> "Мария"
>> str2 = "мария"
=> "мария"
>> str1.casecmp(str2) == 0
=> false
>> require 'active_support/all'
=> true
>> str1.mb_chars.downcase.to_s.casecmp(str2.mb_chars.downcase.to_s) == 0
=> true
Nó hoạt động theo cách này trong Ruby 2.3.1 và các phiên bản trước đó.
Đối với bộ nhớ nhỏ hơn, bạn có thể chọn cherry string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Sửa, Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Vì vậy casecmp
không hoạt động trong 2.4.0; Tuy nhiên, trong 2.4.0 ai có thể so sánh UTF-8 chuỗi bằng tay mà không active_support
đá quý:
>> str1.downcase == str2.downcase
=> true
này đã làm việc fantastically: D thank you very much – Steven
Từ tiêu chuẩn của tôi casecmp là ít nhất hai lần nhanh như phương pháp downcase – Jacob
'casecmp': một tên ngớ ngẩn cho một trường hợp - * trong * phương pháp so sánh nhạy cảm ?! – Zabba