programing

Rails로 문자열을 자르시겠습니까?

itsource 2021. 1. 17. 10:52
반응형

Rails로 문자열을 자르시겠습니까?


다음과 같이 문자열을 자르고 싶습니다.

입력:

string = "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"

산출:

string = "abcd asfsa sadfsaf safsdaf aa...ddddd"

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)"

가장 간단한 경우 :

string = "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"
tr_string = string[0, 20] + "..." + string[-5,5]

또는

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"

Rails 없이도 거의 똑같이 할 수 있습니다 .

text.gsub(/^(.{50,}?).*$/m,'\1...')

50 필요한 길이입니다.


이것은 당신의 문제에 대한 정확한 해결책이 아닐 수도 있지만, 꽤 깨끗한 방법으로 당신을 올바른 방향으로 인도하는 데 도움이 될 것이라고 생각합니다.

"Hello, World!"를 원한다면 처음 다섯 글자로 제한하려면 다음을 수행 할 수 있습니다.

str = "Hello, World!"
str[0...5] # => "Hello"

타원을 원하면 보간하십시오.

"#{str[0...5]}..." #=> "Hello..."

사용자 지정 생략으로 자르기

다른 사람들이 여기에서 제안한 것과 유사하게 Rails의 #truncate 메서드를 사용하고 실제로 문자열의 마지막 부분 인 사용자 지정 생략을 사용할 수 있습니다 .

string = "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"

truncate(string, length: 37, omission: "...#{string[-5, 5]}")
# => "abcd asfsa sadfsaf safsdaf aa...ddddd"

정확히 당신이 원했던 것.

보너스 포인트

당신은 당신을 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

그런 다음 이렇게 부르십시오.

string = "abcd asfsa sadfsaf safsdaf aaaaaaaaaa aaaaaaaaaa dddddddddddddd"

truncate_middle( string, length: 37 )
# => "abcd asfsa sadfsaf safsdaf aa...ddddd"

팔!

이에 대해 문의 해 주셔서 감사합니다. 긴 텍스트의 스 니펫을 표시하는 데 유용한 방법이라고 생각합니다.


이것은 소스 코드입니다 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

그래서 당신의 경우

string.truncate(37, :omission => "...ddddd")

That's actually an interesting problem and you may want to solve it using javascript rather than ruby. Here is why, you're probably displaying this text on the screen somewhere, and you only have a certain amount of width available. So rather than having your link (or whatever text) cut down to a number of characters, what you really want is to make sure the text you're displaying never exceeds a certain width. How many characters can fit in a certain width depends on the font, spacing etc. (the css styles) you're using. You can make sure everything is ok if you're using a ruby-based solution, but it might all fall appart if you decide to change your styling later on.

So, I recommend a javascript-based solution. The way I've handled it previously has been to use the jquery truncate plugin. Include the plugin in your app. And then hook in some javascript similar to the following every time the page loads:

function truncateLongText() {
  $('.my_style1').truncate({
    width: 270,
    addtitle: true
  });
  $('.my_style2').truncate({
    width: 100
  });
}

Add in whatever other styles need to be truncatable and the width that they should respect, the plugin does the rest. This has the added advantage of having all your truncation logic for the whole app in one place which can be handy.

ReferenceURL : https://stackoverflow.com/questions/7023545/truncate-string-with-rails

반응형