Réponses:
Vous cherchez 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
Vous pouvez également convertir les deux chaînes en minuscules ( str.downcase
) et comparer pour l'égalité.
casecmp
: un nom idiot pour une méthode de comparaison sensible à la casse?!
== 0
parzero?
"Apple".casecmp("APPLE").zero?
Mais personnellement, j'aime la réponse d'Andres ci-dessous, qui utilise.casecmp?
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
casecmp
fichiers indésirables.
"aBcDeF".downcase == "abcdef"
place. Beaucoup plus lisible et les gains de performances de l'utilisation casecmp
sont éliminés dans Ruby 2.4+.
false
et nil
pour une API comme celle-ci ...
Si vous devez comparer les 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
Cela fonctionne de cette façon dans Ruby 2.3.1 et les versions antérieures.
Pour une plus petite empreinte mémoire, vous pouvez choisir string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Modifier , Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Cela casecmp
ne fonctionne donc pas dans 2.4.0; Cependant, dans la version 2.4.0, on peut comparer manuellement les chaînes UTF-8 sans active_support
gem:
>> str1.downcase == str2.downcase
=> true
casecmp et zéro? sont des méthodes intégrées de rubis. casecmp renvoie 0 si deux chaînes sont égales, insensible à la casse et zéro? vérifie la valeur zéro (== 0)
str1.casecmp(str2).zero?
0
, surtout lorsqu'il est imbriqué avec une condition plus impliquée.
Pour ruby 2.4 fonctionne bien casecmp? pour les chaînes utf-8 (mb_chars non nécessaires):
2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
=> true
mais casecmp ne fonctionne pas pour utf-8:
2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0