Ste*_*ven 165 ruby string string-comparison
我需要检查一下
"Apple" == "Apple" # returns TRUE
"Apple" == "APPLE" # returns FALSE
Run Code Online (Sandbox Code Playgroud)
在Ruby中.
我需要一个字符串比较,但检查不区分大小写.
mol*_*olf 264
你在找casecmp
.0
如果两个字符串相等,则返回,不区分大小写.
str1.casecmp(str2) == 0
"Apple".casecmp("APPLE") == 0
#=> true
Run Code Online (Sandbox Code Playgroud)
或者,您可以将两个字符串转换为小写(str.downcase
)并比较相等.
And*_*res 40
在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
Run Code Online (Sandbox Code Playgroud)
如果您必须比较忽略大小写的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
Run Code Online (Sandbox Code Playgroud)
它在Ruby 2.3.1及更早版本中以这种方式工作.
对于更小的内存占用,您可以选择string/multibyte
:
require 'active_support'
require 'active_support/core_ext/string/multibyte'
Run Code Online (Sandbox Code Playgroud)
编辑,Ruby 2.4.0:
>> str1.casecmp(str2) == 0
=> false
Run Code Online (Sandbox Code Playgroud)
所以casecmp
在2.4.0中不起作用; 但是在2.4.0中,可以手动比较UTF-8字符串而不使用active_support
gem:
>> str1.downcase == str2.downcase
=> true
Run Code Online (Sandbox Code Playgroud)
casecmp和零?是红宝石内置的方法.如果两个字符串相等,casecmp返回0,不区分大小写并且为零?检查零值(== 0)
str1.casecmp(str2).zero?
Run Code Online (Sandbox Code Playgroud)
对于 ruby 2.4 工作正常casecmp?对于 utf-8 字符串(不需要 mb_chars):
2.4.1 :062 > '??????1'.casecmp?('??????1')
=> true
Run Code Online (Sandbox Code Playgroud)
但 casecmp 不适用于 utf-8:
2.4.1 :062 > '??????1'.casecmp('??????1')
=> 1
2.4.1 :063 > 'string1'.casecmp('StrInG1')
=> 0
Run Code Online (Sandbox Code Playgroud)