Ответы:
Ты ищешь casecmp
. Возвращает, 0
если две строки равны, без учета регистра.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
Кроме того, вы можете преобразовать обе строки в нижний регистр ( str.downcase
) и сравнить на равенство.
casecmp
: Глупое название для прецедентного в , чувствительного сравнить метод ?!
== 0
сzero?
"Apple".casecmp("APPLE").zero?
но лично мне нравится ответ Андреса ниже, который использует.casecmp?
В 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
casecmp
мусором.
"aBcDeF".downcase == "abcdef"
вместо этого. Гораздо более удобочитаемы, а прирост casecmp
производительности устранен в Ruby 2.4+.
false
и nil
для API, подобного этому ...
Если вам нужно сравнить строки 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 можно сравнивать строки UTF-8 вручную без active_support
гема:
>> str1.downcase == str2.downcase
=> true
casecmp и ноль? Рубиновые встроенные методы. casecmp возвращает 0, если две строки равны, без учета регистра и ноль? проверяет нулевое значение (== 0)
str1.casecmp(str2).zero?
0
, особенно когда он вложен в более сложное условие.
Для 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