无论string大小写,Rubystring比较
我需要检查
"Apple" == "Apple" # returns TRUE "Apple" == "APPLE" # returns TRUE "Apple" == "Apple1" # returns FALSE
在Ruby中。
我需要一个string比较,但检查不区分大小写。
你正在寻找casecmp
。 如果两个string相等,则返回0
,不区分大小写。
str1.casecmp(str2) == 0 "Apple".casecmp("APPLE") == 0 #=> true
或者,您可以将这两个string转换为小写( 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-8string忽略大小写:
>> 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和更早版本中以这种方式工作。
为了减less内存占用,你可以selectstring/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-8string而无需使用active_support
gem:
>> str1.downcase == str2.downcase => true
casecmp和零? 是ruby内置的方法。 casecmp返回0如果两个string相等,不区分大小写,并且为零? 检查零值(== 0)
str1.casecmp(str2).zero?