ฉันต้องการapple
และเมื่อเปรียบเทียบกับการเป็นApple
true
ปัจจุบัน
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
ฉันต้องการapple
และเมื่อเปรียบเทียบกับการเป็นApple
true
ปัจจุบัน
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
คำตอบ:
casecmp
คุณกำลังมองหา มันจะส่งกลับ0
ถ้าทั้งสองสตริงมีความเท่าเทียมกัน
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
หรือคุณสามารถแปลงทั้งสองสตริงเป็นตัวพิมพ์เล็ก ( str.downcase
) และเปรียบเทียบเพื่อความเท่าเทียมกัน
casecmp
: ชื่อโง่สำหรับวิธีเปรียบเทียบแบบ case- in -sensitive
== 0
ด้วยzero?
"Apple".casecmp("APPLE").zero?
แต่โดยส่วนตัวแล้วฉันชอบคำตอบของ Andres ด้านล่างซึ่งใช้.casecmp?
ใน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
casecmp
ขยะนี้
"aBcDeF".downcase == "abcdef"
แทน สามารถอ่านได้มากขึ้นและประสิทธิภาพที่เพิ่มขึ้นของการใช้casecmp
จะถูกกำจัดใน Ruby 2.4+
false
และnil
สำหรับ API เช่นนี้ ...
ในกรณีที่คุณต้องเปรียบเทียบสตริง 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'
แก้ไข Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
ดังนั้นcasecmp
ใช้งานไม่ได้ใน 2.4.0; อย่างไรก็ตามใน 2.4.0 หนึ่งสามารถเปรียบเทียบสตริง UTF-8 ด้วยตนเองโดยไม่ต้องactive_support
อัญมณี:
>> str1.downcase == str2.downcase
=> true
casecmp และศูนย์? เป็นวิธีการ inbuilt ทับทิม casecmp ส่งคืนค่า 0 หากสองสตริงมีค่าเท่ากันตัวพิมพ์เล็กและใหญ่เป็นศูนย์? ตรวจสอบค่าศูนย์ (== 0)
str1.casecmp(str2).zero?
0
โดยเฉพาะอย่างยิ่งเมื่อซ้อนกับเงื่อนไขที่เกี่ยวข้องมากกว่า
สำหรับทับทิม 2.4 casecmp ที่ทำงานได้ดี? สำหรับสตริง 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