我希望apple
和Apple
比较为true
。目前
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
你在找casecmp
。如果两个字符串相等,则返回0
,不区分大小写。
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
或者,您可以将两个字符串转换为小写(str.downcase
)并比较相等。
在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
如果您必须比较忽略大小写的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?
对于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