如何将RegExp置于ruby的情况下?

时间:2011-06-12 16:35:16

标签: ruby

类似的东西:

a = 6
case a
when /\d/ then "it's a number"
end

没有运气,它不起作用

4 个答案:

答案 0 :(得分:2)

它不起作用,因为正则表达式匹配字符串,而6不是字符串。如果你做a = '6',那就可以了。

答案 1 :(得分:2)

当与初始化程序中的值一起使用时,所有情况都是对每个表达式使用===进行尝试。问题不在于案例,请尝试:

6 === /\d/

所有这一切,正则表达式只匹配字符串。尝试通过以下方式替换第二行:

case (a.is_a?(String) ? a : a.to_s)

编辑:要在评论中回答OP的后续行动,这里有一个微妙的内容。

/\d/ === '6' # => true
'6' === /\d/ # => false

初学者可能出乎意料,String#===和Regexp#===有不同的效果。所以,对于:

case 'foo'
when String
end

这将调用String === 'foo',而不是'foo' === String等。

答案 2 :(得分:1)

因为regexps匹配字符串。 A是Fixnum。

如果你要写a = "6",那就行了。如果a是数字,可以使用a.is_a?(Numeric)

进行测试

答案 3 :(得分:1)

使其成功的一个小改动:

a = 6
case a.to_s
  when /\d/ then "it's a number"
end

to_s会将所有内容转换为字符串。请注意,您的正则表达式只检查字符串中任何位置是否存在数字。

这样做可能会更好:

case a
  when Numeric then "it's a number"
end