Ruby ssortingng compare indépendamment de la casse

J’ai besoin de vérifier

"Apple" == "Apple" # returns TRUE "Apple" == "APPLE" # returns TRUE "Apple" == "Apple1" # returns FALSE 

en rbuy.

J’ai besoin d’une comparaison de chaînes, mais pour que la vérification ne soit pas sensible à la casse.

Vous recherchez casecmp . Il renvoie 0 si deux chaînes sont égales, sans tenir compte de la casse.

 str1.casecmp(str2) == 0 "Apple".casecmp("APPLE") == 0 #=> true 

Alternativement, vous pouvez convertir les deux chaînes en minuscule ( str.downcase ) et comparer pour l’égalité.

Dans Ruby 2.4.0, vous avez: casecmp?(other_str) → true, false, or nil

 "abcdef".casecmp?("abcde") #=> false "aBcDeF".casecmp?("abcdef") #=> true "abcdef".casecmp?("abcdefg") #=> false "abcdef".casecmp?("ABCDEF") #=> true 

Ici vous avez plus d’infos

Dans le cas où vous devez comparer des chaînes UTF-8 en ignorant la casse:

 >> 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 

Il fonctionne de cette façon dans Ruby 2.3.1 et les versions antérieures.

Pour une empreinte mémoire plus réduite, vous pouvez choisir une ssortingng/multibyte sélection ssortingng/multibyte :

 require 'active_support' require 'active_support/core_ext/ssortingng/multibyte' 

Edit , Ruby 2.4.0:

 >> str1.casecmp(str2) == 0 => false 

Donc, casecmp ne fonctionne pas dans 2.4.0; Cependant, en 2.4.0, on peut comparer manuellement les chaînes UTF-8 sans le gem active_support :

 >> str1.downcase == str2.downcase => true 

casecmp et zéro? sont des méthodes intégrées de rbuy. casecmp renvoie 0 si deux chaînes sont égales, insensibles à la casse et zéro? vérifie la valeur zéro (== 0)

 str1.casecmp(str2).zero?