How to compare strings ignoring the case How to compare strings ignoring the case ruby ruby

How to compare strings ignoring the case


You're looking for casecmp. It returns 0 if two strings are equal, case-insensitively.

str1.casecmp(str2) == 0"Apple".casecmp("APPLE") == 0#=> true

Alternatively, you can convert both strings to lower case (str.downcase) and compare for equality.


In Ruby 2.4.0 you have: casecmp?(other_str) → true, false, or nil

"abcdef".casecmp?("abcde")     #=> false"aBcDeF".casecmp?("abcdef")    #=> true"abcdef".casecmp?("abcdefg")   #=> false"abcdef".casecmp?("ABCDEF")    #=> true

Here you have more info


In case you have to compare UTF-8 strings ignoring case:

>> 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

It works this way in Ruby 2.3.1 and earlier versions.

For smaller memory footprint you can cherry pick string/multibyte:

require 'active_support'require 'active_support/core_ext/string/multibyte'

Edit, Ruby 2.4.0:

>> str1.casecmp(str2) == 0=> false

So casecmp doesn't work in 2.4.0; However in 2.4.0 one can compare UTF-8 strings manually without active_support gem:

>> str1.downcase == str2.downcase=> true