chu*_*boy 15 ruby ruby-on-rails
有没有人有任何代码方便中心截断Ruby on Rails中的字符串?
这样的事情:例如:"Hello World,你好吗?" >>"你好吗?"
Ben*_*van 32
如果你想要一个固定的长度而不管字符串的长度,你可以使用Rails #truncate:
s.truncate(100, omission: "...#{s.last(50)}")
Run Code Online (Sandbox Code Playgroud)
Mik*_*use 13
一个正则表达式版本怎么样:
class String
def ellipsisize
gsub(/(...).{4,}(...)/, '\1...\2')
end
end
"abc".ellipsisize #=> "abc"
"abcdefghi".ellipsisize #=> "abcdefghi"
"abcdefghij".ellipsisize #=> "abc...hij"
Run Code Online (Sandbox Code Playgroud)
编辑:正如评论中所建议的,参数化长度(并使用不同的正则表达式,只是为了它)
class String
def ellipsisize(len = 9)
len = 9 unless len > 9 # assumes minimum chars at each end = 3
gsub(%r{(...).{#{len-5},}(...)}, '\1...\2')
end
end
Run Code Online (Sandbox Code Playgroud)
所以...
"abcdefghij".ellipsisize #=> "abc...hij"
Run Code Online (Sandbox Code Playgroud)
但我们也可以:
"abcdefghij".ellipsisize(10) #=> "abcdefghij"
Run Code Online (Sandbox Code Playgroud)
khe*_*lll 12
这是Mike Woodhouse的答案的修改版本.它需要2个可选的参数:要被省略的字符串的最小长度和边长.
class String
def ellipsisize(minimum_length=4,edge_length=3)
return self if self.length < minimum_length or self.length <= edge_length*2
edge = '.'*edge_length
mid_length = self.length - edge_length*2
gsub(/(#{edge}).{#{mid_length},}(#{edge})/, '\1...\2')
end
end
"abc".ellipsisize #=> "abc"
"abcdefghi".ellipsisize #=> "abcdefghi"
"abcdefghij".ellipsisize #=> "abc...hij"
"abcdefghij".ellipsisize(4,4) #=> "abcd...ghij"
"Testing all paramas and checking them!".ellipsisize(6,5) #=> "Testi...them!"
Run Code Online (Sandbox Code Playgroud)
由于您没有指定要截断的字符数,因此我假设您(要从您的示例中)截断长度大于6的字符串.然后你可以使用这样的东西:
s = "Hello World, how are you?"
s = s[0, 3] + "..." + s[-3, 3] if s.length > 9
=> "Hel...ou?"
Run Code Online (Sandbox Code Playgroud)
如果您需要截断更多字符,只需调整范围即可.
这是我的建议:
s[3...-4] = "..." if s.length > 9
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3124 次 |
| 最近记录: |