programing

대소문자를 무시하고 문자열을 비교하는 방법

magicmemo 2023. 7. 5. 20:35
반응형

대소문자를 무시하고 문자열을 비교하는 방법

나는 되고 싶다.apple그리고.Apple…과 비교하면true.현재의

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

당신은 찾고 있어요. 그것은 돌아옵니다.0두 문자열이 같은 경우 대소문자를 구분하지 않습니다.

str1.casecmp(str2) == 0

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

또는 두 문자열을 소문자()str.downcase로 변환하고 동일성을 비교할 수 있습니다.

Ruby 2.4.0에는 다음이 있습니다.casecmp?(other_str) → true, false, or nil

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

여기 더 많은 정보가 있습니다.

UTF-8 문자열을 대소문자를 무시하고 비교해야 하는 경우:

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

Ruby 2.3.1 및 이전 버전에서는 이러한 방식으로 작동합니다.

더 작은 메모리 공간을 위해 체리 픽 가능string/multibyte:

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

편집, 루비 2.4.0:

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

그렇게casecmp2.4.0에서는 작동하지 않습니다. 그러나 2.4.0에서는 UTF-8 문자열을 수동으로 비교할 수 있습니다.active_support보석:

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

루비 2.4 작동 중인 fine case cmp의 경우?utf-8 문자열의 경우(mb_chars 필요 없음):

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

하지만 casecmp는 utf-8에서 작동하지 않습니다.

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

casecmp와 0?는 루비 내장 메서드입니다. casecmp는 두 문자열이 동일하면 0을 반환하고 대소문자를 구분하지 않고 0을 반환합니까?0 값 확인(==0)

str1.casecmp(str2).zero?

언급URL : https://stackoverflow.com/questions/2844507/how-to-compare-strings-ignoring-the-case

반응형