Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to compare strings ignoring the case

People also ask

Does == ignore case?

Java String: equalsIgnoreCase() MethodTwo strings are considered equal ignoring case if they are of the same length and corresponding characters in the two strings are equal ignoring case.

How do you compare the first n characters of two strings by ignoring the case?

tf = strncmpi( s1,s2 , n ) compares up to n characters of s1 and s2 , ignoring any differences in letter case. The function returns 1 ( true ) if the two are identical and 0 ( false ) otherwise.

Which library function compare two strings by ignoring the case?

The strcasecmp() function compares, while ignoring differences in case, the string pointed to by string1 to the string pointed to by string2.

How do you ignore a case of strings in Python?

Approach No 1: Python String lower() Method This is the most popular approach to case-insensitive string comparisons in Python. The lower() method converts all the characters in a string to the lowercase, making it easier to compare two strings. The example code shows how the lower() method works.


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

For ruby 2.4 working fine casecmp? for utf-8 strings (mb_chars not needed):

2.4.1 :062 > 'строка1'.casecmp?('СтроКа1')
 => true

but casecmp isn't workin for utf-8:

2.4.1 :062 > 'строка1'.casecmp('СтроКА1')
 => 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
 => 0

casecmp and zero? are ruby inbuilt methods. casecmp returns 0 if two strings are equal, case-insensitively and zero? checks for zero value (==0)

str1.casecmp(str2).zero?