我想制作一个条件语句,检查是否:
comment.user.name
(可能返回"Montgomery Philips Ridiculouslylonglastname"
之类的内容)包含任何超过15个字符的单词。
类似的东西:
if comment.user.name.split(" ").???
答案 0 :(得分:7)
答案 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}/