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_supportgem:>> str1.downcase == str2.downcase => true