ruby interpolated string
Como comparar strings ignorando o caso (4)
Eu quero que a apple
e a comparação da Apple
sejam true
. Atualmente
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
Caso você tenha que comparar strings UTF-8 ignorando o 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
Funciona desta maneira no Ruby 2.3.1 e versões anteriores.
Para uma pegada menor de memória, você pode selecionar string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Editar , Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Então o casecmp
não funciona no 2.4.0; No entanto, na versão 2.4.0, pode-se comparar manualmente as strings UTF-8 sem a gem active_support
:
>> str1.downcase == str2.downcase
=> true
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
Você está procurando por casecmp
. Retorna 0
se duas cadeias são iguais, insensíveis a maiúsculas e minúsculas.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
Como alternativa, você pode converter as duas cadeias para minúsculas ( str.downcase
) e comparar para igualdade.
casecmp e zero? são métodos incorporados ao rubi. casecmp devolve 0 se duas cadeias são iguais, não diferencia maiúsculas de minúsculas e zero? verifica o valor zero (== 0)
str1.casecmp(str2).zero?