Respostas:
Você está procurando casecmp
. Retorna 0
se 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 ?!
== 0
por #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
casecmp
lixo.
"aBcDeF".downcase == "abcdef"
. Muito mais legível e os ganhos de desempenho do uso casecmp
são eliminados no Ruby 2.4+.
false
e nil
para 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_support
gem:
>> 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