kru*_*hah 54 ruby truncate ruby-on-rails
我想截断一个字符串如下:
输入:
string = "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"
Run Code Online (Sandbox Code Playgroud)
输出:
string = "abcd asfsa sadfsaf safsdaf aa...ddddd"
Run Code Online (Sandbox Code Playgroud)
Veg*_*ger 93
看看truncate,它部分想要你想要的.如果你测试它是否被截断,你可以在截断的部分之后添加一些最后一部分.
truncate("Once upon a time in a world far far away")
# => "Once upon a time in a world..."
truncate("Once upon a time in a world far far away", :length => 17)
# => "Once upon a ti..."
truncate("Once upon a time in a world far far away", :length => 17, :separator => ' ')
# => "Once upon a..."
truncate("And they found that many people were sleeping better.", :length => 25, :omission => '... (continued)')
# => "And they f... (continued)"
Run Code Online (Sandbox Code Playgroud)
fl0*_*00r 14
在最简单的情况下:
string = "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"
tr_string = string[0, 20] + "..." + string[-5,5]
Run Code Online (Sandbox Code Playgroud)
要么
def trancate(string, length = 20)
string.size > length+5 ? [string[0,length],string[-5,5]].join("...") : string
end
# Usage
trancate "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"
#=> "abcd asfsa sadfsaf s...ddddd"
trancate "Hello Beautiful World"
#=> "Hello Beautiful World"
trancate "Hello Beautiful World", 5
#=> "Hello...World"
Run Code Online (Sandbox Code Playgroud)
yeg*_*256 13
没有Rails 你几乎可以做同样的事情:
text.gsub(/^(.{50,}?).*$/m,'\1...')
Run Code Online (Sandbox Code Playgroud)
50
是你需要的长度.
Jos*_*ter 10
与其他人在此处提出的建议类似,您可以使用Rails的#truncate方法并使用实际上是字符串最后一部分的自定义省略:
string = "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"
truncate(string, length: 37, omission: "...#{string[-5, 5]}")
# => "abcd asfsa sadfsaf safsdaf aa...ddddd"
Run Code Online (Sandbox Code Playgroud)
正是你想要的.
你可能希望将它包装在一个自定义方法中,这个方法就像truncate_middle
为你做一些花哨的步法:
# Truncate the given string but show the last five characters at the end.
#
def truncate_middle( string, options = {} )
options[:omission] = "...#{string[-5, 5]}" # Use last 5 chars of string.
truncate( string, options )
end
Run Code Online (Sandbox Code Playgroud)
然后就这样称呼它:
string = "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"
truncate_middle( string, length: 37 )
# => "abcd asfsa sadfsaf safsdaf aa...ddddd"
Run Code Online (Sandbox Code Playgroud)
繁荣!
谢谢你提出这个问题.我认为这是显示较长文本片段的有用方法.
这可能不是您问题的确切解决方案,但我认为这将有助于您以正确的方式处理正确的方向.
如果你想要"Hello,World!" 要限制在前五个字母,你可以这样做:
str = "Hello, World!"
str[0...5] # => "Hello"
Run Code Online (Sandbox Code Playgroud)
如果你想要一个省略号,只需插入它:
"#{str[0...5]}..." #=> "Hello..."
Run Code Online (Sandbox Code Playgroud)
这是源代码 String#truncate
def truncate(truncate_at, options = {})
return dup unless length > truncate_at
options[:omission] ||= '...'
length_with_room_for_omission = truncate_at - options[:omission].length
stop = \
if options[:separator]
rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission
else
length_with_room_for_omission
end
"#{self[0...stop]}#{options[:omission]}"
end
Run Code Online (Sandbox Code Playgroud)
所以,至于你的情况
string.truncate(37, :omission => "...ddddd")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
57418 次 |
最近记录: |