Odpowiedzi:
Szukasz casecmp
. Zwraca, 0
jeśli dwa ciągi są równe, bez rozróżniania wielkości liter.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
Alternatywnie możesz przekonwertować oba ciągi na małe litery ( str.downcase
) i porównać je pod kątem równości.
casecmp
: Głupie imię dla CASE- w wrażliwego metodą porównania ?!
== 0
zzero?
"Apple".casecmp("APPLE").zero?
Ale osobiście podoba mi się odpowiedź Andresa poniżej, która używa.casecmp?
W Rubim 2.4.0 masz:casecmp?(other_str) → true, false, or nil
"abcdef".casecmp?("abcde") #=> false
"aBcDeF".casecmp?("abcdef") #=> true
"abcdef".casecmp?("abcdefg") #=> false
"abcdef".casecmp?("ABCDEF") #=> true
casecmp
śmieciami.
"aBcDeF".downcase == "abcdef"
zamiast tego używał . Znacznie bardziej czytelne, a korzyści wynikające z używania casecmp
są wyeliminowane w Ruby 2.4+.
false
i nil
dla takiego API ...
W przypadku, gdy musisz porównać łańcuchy UTF-8 ignorując wielkość liter:
>> 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
Działa to w ten sposób w Rubim 2.3.1 i wcześniejszych wersjach.
Aby uzyskać mniejszy rozmiar pamięci, możesz wybrać string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Edycja , Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Więc casecmp
nie działa w 2.4.0; Jednak w 2.4.0 można ręcznie porównać łańcuchy UTF-8 bez active_support
klejnotu:
>> str1.downcase == str2.downcase
=> true
casecmp i zero? to metody wbudowane w rubiny. casecmp zwraca 0, jeśli dwa łańcuchy są równe, bez rozróżniania wielkości liter i zero? sprawdza wartość zerową (== 0)
str1.casecmp(str2).zero?
0
, zwłaszcza gdy jest zagnieżdżony z bardziej złożonym warunkiem.
Dla Ruby 2.4 działa dobrze casecmp? dla ciągów utf-8 (mb_chars nie są potrzebne):
2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
=> true
ale casecmp nie działa dla utf-8:
2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0