How to compare strings ignoring the case

后端 未结 5 674
名媛妹妹
名媛妹妹 2020-12-04 20:53

I want apple and Apple comparison to be true. Currently

\"Apple\" == \"Apple\"  # returns TRUE
\"Apple\" == \"APPLE\"          


        
相关标签:
5条回答
  • 2020-12-04 21:00

    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
    
    0 讨论(0)
  • 2020-12-04 21:01

    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.

    0 讨论(0)
  • 2020-12-04 21:07

    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?
    
    0 讨论(0)
  • 2020-12-04 21:10

    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

    0 讨论(0)
  • 2020-12-04 21:17

    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
    
    0 讨论(0)
提交回复
热议问题