Ruby string compare независимо от регистра строки
Мне нужно проверить для
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns TRUE
"Apple" == "Apple1" # returns FALSE
в Ruby.
Мне нужно сравнение строк,но для проверки не учитывается регистр.
4 ответа:
вы ищете
casecmp
. Он возвращает0
Если две строки равны, регистр не учитывается.str1.casecmp(str2) == 0 "Apple".casecmp("APPLE") == 0 #=> true
кроме того, вы можете конвертировать обе строки в нижний регистр (
str.downcase
) и сравнить на равенство.
на Руби 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
в случае, если вам нужно сравнить строки UTF-8, игнорируя case:
>> 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'
Edit, Ruby 2.4.0:
>> str1.casecmp(str2) == 0 => false
так
casecmp
не работает в 2.4.0; однако в 2.4.0 можно сравнить строки UTF-8 вручную безactive_support
gem:>> str1.downcase == str2.downcase => true