web-dev-qa-db-ja.com

大文字小文字を無視して文字列を比較する方法

AppleAppleの比較をtrueにしたい。現在

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

casecmp を探しています。 2つの文字列が大文字と小文字を区別せずに等しい場合、0を返します。

str1.casecmp(str2) == 0

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

または、両方の文字列を小文字に変換して( str.downcase )、等しいかどうかを比較できます。

261
molf

Ruby 2.4.0には次のものがあります:casecmp?(other_str) → true, false, or nil

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

ここに詳細があります

38
Andres

大文字小文字を無視してUTF-8文字列を比較する必要がある場合:

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

Ruby 2.3.1以前のバージョンではこのように機能します。

メモリフットプリントを小さくするには、string/multibyteを選択できます:

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

編集、Ruby 2.4.0:

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

したがって、casecmpは2.4.0では機能しません。ただし、2.4.0では、active_support gemなしでUTF-8文字列を手動で比較できます。

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

casecmpとゼロ? Ruby組み込みメソッドです。 casecmpは、大文字と小文字を区別せずに2つの文字列が等しい場合に0を返しますか?ゼロ値(== 0)をチェックします

str1.casecmp(str2).zero?
5
Sivalingam

Ruby 2.4が正常に動作している場合 casecmp? utf-8文字列の場合(mb_charsは不要):

2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
 => true

しかし、casecmpはutf-8では機能しません。

2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
 => 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
 => 0
3