184

appleApple比較したいですtrue。現在

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

5 に答える 5

292

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

str1.casecmp(str2) == 0

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

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

于 2010-05-16T16:33:14.563 に答える
50

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

詳細はこちら

于 2017-03-01T19:37:04.853 に答える
8

大文字と小文字を区別せずに 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_supportgemを使用せずに UTF-8 文字列を手動で比較できます。

>> str1.downcase == str2.downcase
=> true
于 2016-01-30T13:22:45.250 に答える