Antworten:
Du suchst casecmp
. Es wird zurückgegeben, 0
wenn zwei Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung gleich sind.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
Alternativ können Sie beide Zeichenfolgen in Kleinbuchstaben ( str.downcase
) konvertieren und auf Gleichheit vergleichen.
casecmp
: Ein dummer Name für eine Vergleichsmethode, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird?!
== 0
durchzero?
"Apple".casecmp("APPLE").zero?
aber ich persönlich mag Andres Antwort unten, die verwendet.casecmp?
In Ruby 2.4.0 haben Sie:casecmp?(other_str) → true, false, or nil
"abcdef".casecmp?("abcde") #=> false
"aBcDeF".casecmp?("abcdef") #=> true
"abcdef".casecmp?("abcdefg") #=> false
"abcdef".casecmp?("ABCDEF") #=> true
casecmp
Müll verwenden.
"aBcDeF".downcase == "abcdef"
stattdessen verwenden. casecmp
In Ruby 2.4+ sind viel besser lesbar und die Leistungssteigerungen bei der Verwendung entfallen.
false
und nil
für eine API wie diese ...
Falls Sie UTF-8-Zeichenfolgen vergleichen müssen, ohne die Groß- und Kleinschreibung zu beachten:
>> 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
Dies funktioniert in Ruby 2.3.1 und früheren Versionen auf diese Weise.
Für einen geringeren Speicherbedarf können Sie Folgendes auswählen string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Bearbeiten , Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Funktioniert casecmp
also nicht in 2.4.0; In 2.4.0 kann man UTF-8-Strings jedoch manuell ohne active_support
Gem vergleichen:
>> str1.downcase == str2.downcase
=> true
casecmp und null? sind rubinrote Methoden. casecmp gibt 0 zurück, wenn zwei Zeichenfolgen gleich sind, ohne Berücksichtigung der Groß- und Kleinschreibung und Null? prüft auf Nullwert (== 0)
str1.casecmp(str2).zero?
0
, besonders wenn es mit einer komplexeren Bedingung verschachtelt ist.
Für Ruby 2.4 funktioniert feines Casecmp? für utf-8-Strings (mb_chars nicht erforderlich):
2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
=> true
aber casecmp funktioniert nicht für utf-8:
2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0