Hoe tekenreeksen te vergelijken zonder hoofdletters

Ik wil dat de vergelijking van Appleen Appletrueis.
Momenteel

"Apple" == "Apple"  # returns TRUE
"Apple" == "APPLE"  # returns FALSE

Antwoord 1, autoriteit 100%

Je zoekt naar casecmp. Het retourneert 0als 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

Hier heb je meer info


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/multibytekiezen:

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

Bewerken, Ruby 2.4.0:

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

Dus casecmpwerkt niet in 2.4.0; In 2.4.0 kan men UTF-8-strings echter handmatig vergelijken zonder active_supportgem:

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

Other episodes