Risposte:
Stai cercando casecmp
. Restituisce 0
se due stringhe sono uguali, senza distinzione tra maiuscole e minuscole.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
In alternativa, puoi convertire entrambe le stringhe in lettere minuscole ( str.downcase
) e confrontarle per l'uguaglianza.
casecmp
: un nome sciocco per un metodo di confronto case- in- sensibile ?!
== 0
conzero?
"Apple".casecmp("APPLE").zero?
Ma personalmente mi piace la risposta di Andres qui sotto, che usa.casecmp?
In Ruby 2.4.0 hai:casecmp?(other_str) → true, false, or nil
"abcdef".casecmp?("abcde") #=> false
"aBcDeF".casecmp?("abcdef") #=> true
"abcdef".casecmp?("abcdefg") #=> false
"abcdef".casecmp?("ABCDEF") #=> true
casecmp
spazzatura.
"aBcDeF".downcase == "abcdef"
invece. Molto più leggibile e i vantaggi in termini di prestazioni dell'utilizzo casecmp
sono eliminati in Ruby 2.4+.
false
e nil
per un'API come questa ...
Nel caso in cui devi confrontare le stringhe UTF-8 ignorando il caso:
>> 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
Funziona in questo modo in Ruby 2.3.1 e versioni precedenti.
Per un ingombro di memoria ridotto, puoi scegliere string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Modifica , Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Quindi casecmp
non funziona in 2.4.0; Tuttavia in 2.4.0 si possono confrontare manualmente le stringhe UTF-8 senza active_support
gem:
>> str1.downcase == str2.downcase
=> true
casecmp e zero? sono metodi integrati rubino. casecmp restituisce 0 se due stringhe sono uguali, senza distinzione tra maiuscole e minuscole e zero? verifica il valore zero (== 0)
str1.casecmp(str2).zero?
0
, specialmente quando nidificato con una condizione più coinvolta.
Per ruby 2.4 funziona bene casecmp? per stringhe utf-8 (mb_chars non necessario):
2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
=> true
ma casecmp non funziona con utf-8:
2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0