Câu trả lời:
Bạn đang tìm kiếm casecmp
. Nó trả về 0
nếu hai chuỗi bằng nhau, không phân biệt chữ hoa chữ thường.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
Ngoài ra, bạn có thể chuyển đổi cả hai chuỗi thành chữ thường ( str.downcase
) và so sánh cho bằng.
casecmp
: Một tên ngớ ngẩn cho một đựng pin- trong phương pháp so sánh nhạy cảm với ?!
== 0
bằngzero?
"Apple".casecmp("APPLE").zero?
Nhưng cá nhân tôi thích câu trả lời của Andres bên dưới, sử dụng.casecmp?
Trong Ruby 2.4.0, bạn có:casecmp?(other_str) → true, false, or nil
"abcdef".casecmp?("abcde") #=> false
"aBcDeF".casecmp?("abcdef") #=> true
"abcdef".casecmp?("abcdefg") #=> false
"abcdef".casecmp?("ABCDEF") #=> true
casecmp
rác này .
"aBcDeF".downcase == "abcdef"
thay thế. Dễ đọc hơn nhiều và hiệu suất sử dụng casecmp
được loại bỏ trong Ruby 2.4+.
false
và nil
cho một API như thế này ...
Trong trường hợp bạn phải so sánh trường hợp bỏ qua chuỗi UTF-8:
>> 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 dấu chân bộ nhớ nhỏ hơn, bạn có thể chọn cherry string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Chỉnh 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, người ta có thể so sánh các chuỗi UTF-8 theo cách thủ công mà không cần active_support
gem:
>> str1.downcase == str2.downcase
=> true
casecmp và số không? là phương pháp sẵn có của ruby. casecmp trả về 0 nếu hai chuỗi bằng nhau, không phân biệt chữ hoa chữ thường và 0? kiểm tra giá trị 0 (== 0)
str1.casecmp(str2).zero?
0
, đặc biệt là khi được lồng với một điều kiện liên quan nhiều hơn.
Đối với ruby 2.4 làm việc tốt casecmp? cho chuỗi utf-8 (không cần mb_chars):
2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
=> true
nhưng casecmp không hoạt động cho utf-8:
2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0