Answers:
您正在寻找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中,可以不用active_support
gem 手动比较UTF-8字符串:
>> 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