184

我想appleApple比较是true。目前

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

5 回答 5

292

你正在寻找casecmp. 如果两个字符串相等,则返回0,不区分大小写。

str1.casecmp(str2) == 0

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

或者,您可以将两个字符串都转换为小写 ( str.downcase) 并比较是否相等。

于 2010-05-16T16:33:14.563 回答
50

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

在这里你有更多信息

于 2017-03-01T19:37:04.853 回答
8

如果您必须比较忽略大小写的 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_supportgem:

>> str1.downcase == str2.downcase
=> true
于 2016-01-30T13:22:45.250 回答
6

对于 ruby​​ 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
于 2019-04-09T13:30:11.220 回答
5

casecmp 和零?是 ruby​​ 内置的方法。如果两个字符串相等,不区分大小写并且为零,casecmp 返回 0?检查零值 (==0)

str1.casecmp(str2).zero?
于 2017-07-03T13:41:42.450 回答