这里有一些需要考虑的事情。
从...开始:
str = "doweighin;domeasurements,weightplot"
str.gsub(';', ',').split(',') # => ["doweighin", "domeasurements", "weightplot"]
str.gsub(';', ',').split(',').include?('weightplot') # => true
.gsub(';', ',').split(',')
虽然使用是愚蠢的,当split
让我们使用正则表达式时:
str.split(/[;,]/) # => ["doweighin", "domeasurements", "weightplot"]
如果目标词或搜索词的大小写不同,则存在一个小问题,即搜索将失败:
str.split(/[;,]/).include?('WeightPlot') # => false
您可以通过在进行测试之前将外壳折叠为大写或小写来解决此问题:
str.downcase.split(/[;,]/).include?('WeightPlot'.downcase) # => true
不过,有一些更短的方法可以进行测试:
str['weightplot'] # => "weightplot"
它只是进行字符串内搜索。如果您要查找的字符串在另一个字符串中找到,这可能会返回误报。
str[/\bWeightPlot\b/i] # => "weightplot"
它使用正则表达式来查找单词,忽略大小写,并要求它的两侧都有单词边界。
与其硬编码目标字符串,不如使用字符串插值在运行时插入它:
target = 'WeightPlot'
str[/\b#{ target }\b/i] # => "weightplot"
您可以使用 将快捷方式的结果转换为布尔值 true/false !!
。“not-not”是将nil
结果变为 false 并将其他任何内容变为 true 的好方法:
!!str['weightplot'] # => true
!!str[/\bWeightPlot\b/i] # => true