web-dev-qa-db-de.com

So vergleichen Sie Zeichenfolgen ohne Berücksichtigung der Groß- / Kleinschreibung

Ich möchte, dass der Vergleich von Apple und Appletrue ist. Zur Zeit

"Apple" == "Apple"  # returns TRUE
"Apple" == "Apple"  # returns FALSE
162
Steven

Sie suchen nach casecmp . Es gibt 0 Wenn zwei Zeichenfolgen gleich sind, wird die Groß-/Kleinschreibung nicht berücksichtigt.

str1.casecmp(str2) == 0

"Apple".casecmp("Apple") == 0
#=> true

Alternativ können Sie beide Zeichenfolgen in Kleinbuchstaben ( str.downcase ) und vergleiche auf Gleichheit.

261
molf

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

Hier gibt es mehr Infos

38
Andres

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

Für einen kleineren Speicherbedarf können Sie string/multibyte Auswählen:

require 'active_support'
require 'active_support/core_ext/string/multibyte'

Bearbeiten, Ruby 2.4.0:

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

Also funktioniert casecmp in 2.4.0 nicht; In 2.4.0 kann man UTF-8-Strings jedoch manuell ohne den Edelstein active_support Vergleichen:

>> str1.downcase == str2.downcase
=> true
8
Adobe

casecmp und null? are Ruby eingebaute Methoden. casecmp gibt 0 zurück, wenn zwei Zeichenfolgen gleich sind, ohne Rücksicht auf Groß- und Kleinschreibung und Null? prüft auf Nullwert (== 0)

str1.casecmp(str2).zero?
5
Sivalingam

Für Ruby 2.4 funktioniert gut 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
3