Respostas:
Você está procurando casecmp. Retorna 0se duas cadeias são iguais, sem distinção entre maiúsculas e minúsculas.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
Como alternativa, você pode converter as duas seqüências para minúsculas ( str.downcase) e comparar para igualdade.
casecmp: Um nome tolo para um caso- no método de comparar sensíveis ao ?!
== 0por #zero?
"Apple".casecmp("APPLE").zero?Mas eu, pessoalmente, como Andres resposta abaixo, que usa.casecmp?
No Ruby 2.4.0, você tem:casecmp?(other_str) → true, false, or nil
"abcdef".casecmp?("abcde") #=> false
"aBcDeF".casecmp?("abcdef") #=> true
"abcdef".casecmp?("abcdefg") #=> false
"abcdef".casecmp?("ABCDEF") #=> true
casecmplixo.
"aBcDeF".downcase == "abcdef". Muito mais legível e os ganhos de desempenho do uso casecmpsão eliminados no Ruby 2.4+.
falsee nilpara uma API assim ...
Caso você precise comparar as seqüências de caracteres UTF-8 que ignoram:
>> 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
Funciona assim no Ruby 2.3.1 e versões anteriores.
Para uma menor pegada de memória, você pode escolher string/multibyte:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Edite , Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Portanto casecmp, não funciona na 2.4.0; No entanto, na 2.4.0, pode-se comparar manualmente as strings UTF-8 sem active_supportgem:
>> str1.downcase == str2.downcase
=> true
casecmp e zero? são métodos embutidos em rubi. casecmp retorna 0 se duas cadeias são iguais, sem distinção entre maiúsculas e minúsculas e zero? verifica o valor zero (== 0)
str1.casecmp(str2).zero?
0, especialmente quando aninhado com uma condição mais envolvida.
Para ruby 2.4 funcionando bem casecmp? para strings utf-8 (mb_chars não é necessário):
2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
=> true
mas o casecmp não está funcionando para o utf-8:
2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0