2010-05-16 20 views

Trả lời

223

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 

Hoặc, bạn có thể chuyển đổi cả hai chuỗi thành chữ thường (str.downcase) và so sánh cho bình đẳng.

+0

này đã làm việc fantastically: D thank you very much – Steven

+18

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

+67

'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

5

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 
13

Trong của 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 

Here you have more info

0

casecmp và zero ? là các phương thức sẵn có của ruby. casecmp trả về 0 nếu hai chuỗi là bằng nhau, phân biệt chữ hoa chữ thường và số không? kiểm tra cho zero giá trị (== 0)

str1.casecmp(str2).zero? 
Các vấn đề liên quan