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

Aqui você tem mais informações


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?




string-comparison