Ik wil dat de vergelijking van Apple
en Apple
true
is.
Momenteel
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
Antwoord 1, autoriteit 100%
Je zoekt naar casecmp
. Het retourneert 0
als twee tekenreeksen gelijk zijn, niet hoofdlettergevoelig.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
Als alternatief kunt u beide tekenreeksen converteren naar kleine letters (str.downcase
) en vergelijk voor gelijkheid.
Antwoord 2, autoriteit 17%
In Ruby 2.4.0heb je: casecmp?(other_str) → true, false, or nil
"abcdef".casecmp?("abcde") #=> false
"aBcDeF".casecmp?("abcdef") #=> true
"abcdef".casecmp?("abcdefg") #=> false
"abcdef".casecmp?("ABCDEF") #=> true
Antwoord 3, autoriteit 3%
In het geval u UTF-8-strings moet vergelijken zonder hoofdletters:
>> 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
Het werkt op deze manier in Ruby 2.3.1 en eerdere versies.
Voor een kleinere geheugenvoetafdruk kunt u string/multibyte
kiezen:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Bewerken, Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Dus casecmp
werkt niet in 2.4.0; In 2.4.0 kan men UTF-8-strings echter handmatig vergelijken zonder active_support
gem:
>> str1.downcase == str2.downcase
=> true
Antwoord 4, autoriteit 2%
Omdat ruby 2.4 prima werkt casecmp?voor utf-8 strings (mb_chars niet nodig):
2.4.1 :062 > '1'.casecmp?('1')
=> true
maar casecmp werkt niet voor utf-8:
2.4.1 :062 > '1'.casecmp('1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0
Antwoord 5, autoriteit 2%
casecmp en nul? zijn ruby ingebouwde methoden. casecmp retourneert 0 als twee strings gelijk zijn, niet hoofdlettergevoelig en nul? controleert op nulwaarde (==0)
str1.casecmp(str2).zero?