检查字符串中是否包含大于15个字符的单词

时间:2013-04-24 07:34:22

标签: ruby-on-rails ruby regex

我想制作一个条件语句,检查是否:

comment.user.name

(可能返回"Montgomery Philips Ridiculouslylonglastname"之类的内容)包含任何超过15个字符的单词。

类似的东西:

if comment.user.name.split(" ").???

6 个答案:

答案 0 :(得分:7)

这个怎么样?

comment.user.name.split.any? { |x| x.length > 20 }

以下是精彩的enumerable mixin文档。

答案 1 :(得分:5)

仅供参考(因为您已找到合适的答案),使用正则表达式进行操作:

/\b[a-z]{15,}\b/i

如果找到匹配项,则会有超过15个字符的单词(标题中为20个字符)。

答案 2 :(得分:2)

使用regexps比创建一个全新的数组更简洁,只是为了检查一个字符串是否与某个模式匹配(为此创建了正则表达式):

('a'*19+' '+'a'*19) =~ /[^ ]{20}/ #=> nil
('a'*19+' '+'a'*20) =~ /[^ ]{20}/ #=> 20

这就是我的意思:

$ ruby -rbenchmark -e 'long_string = ([("a"*20)]*1000).join(" ")
puts Benchmark.measure{ 100.times{ long_string.split.any? { |x| x.length > 20 } }  }'
#=>   0.050000   0.000000   0.050000 (  0.051955)
$ ruby -rbenchmark -e 'long_string = ([("a"*20)]*1000).join(" ")
puts Benchmark.measure{ 100.times{ long_string  =~ /[^ ]{20}/ }  }'
#=>   0.000000   0.000000   0.000000 (  0.000128)

regexp版本比string.split.any?版快〜365倍!

答案 3 :(得分:0)

w = "Montgomery Philips Ridiculouslylonglastname" 
w.split().any? {|i| i[16] != nil} #=> true

"Montgomery Philips".split().any? {|i| i[16] != nil} #=> false

答案 4 :(得分:0)

def contains_longer_than length
  comment.user.name.split.select{|x| x.length > length}.size > 0
end

答案 5 :(得分:0)

Loamhoof很接近,但有一个更简单的正则表达式:

/\w{16}/