无论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?