2014-05-09 2 views
2

나는 대문자로 된 회사 이름을 적절한 이름으로 변환하려고합니다.Ruby on Rails에서 로마 숫자, 대시, 아포스트로피 등으로 제목을 붙입니다.

회사 이름이 포함될 수 있습니다

  1. 대시
  2. 아포스트로피
  3. 로마 숫자 대문자를 유지해야 LLC, LP, INC 같은
  4. 텍스트입니다.

는 나는이 같은 약어를 사용할 수있을 거라고 생각 :

ACRONYMS = %W(LP III IV VI VII VIII IX GI) 
ActiveSupport::Inflector.inflections(:en) do |inflect| 
    ACRONYMS.each { |a| inflect.acronym(a) } 
end 

그러나, 변환이 너무 VIVII이 작동하지 않는 데, 계정 단어 분할을 고려하지 않습니다. 예를 들어 VI가 전체 단어가되면서 "ADVISORS".titleize의 변환은 "Ad VI Sors"입니다.

대시가 제거됩니다.

일반적인 문제에 대한 일반적인 보석이있는 것 같지만 찾지 못했습니다. 이 문제는 그렇게 흔한 것이 아닙니까? 현재의 굴절 라이브러리를 완전히 해킹하는 것 외에 가장 좋은 해결책은 무엇입니까?

+0

동일한 문제를 해결하면서이 문제가 발생했습니다. VI를 머리 글자 어로 설정하면 "ADVISORS"가 분리되어 나타납니다. 그러나 단어가 모두 대문자 인 경우에만 발견됩니다. 소문자 "고문"은 같은 방식으로 대우받지 못합니다. 결국 타이틀을 얻는 중이므로 원하는대로 제목을 지정하고 "고문"을 얻고 VI는 그 자체로 모든 대문자로 끝납니다. – Yardboy

답변

3

회사 이름은 마크가 (서비스 마크와 같이) 적절한 이름보다 많기 때문에 약간 이상합니다. 즉, 정확한 대문자 사용은 실제로 중요 할 수 있으며 제목을 지정하려고하면 가치가 없을 수 있습니다.

어쨌든 다음과 같은 패턴이 있습니다. "보관"할 토큰 목록을 작성한 다음 수동으로 문자열을 분할하고 토큰이 아닌 부분의 제목을 지정합니다.

# Make sure you put long strings before short (VII before VI) 
word_tokens = %w{VII VI IX XI} 
# Special characters need to be separate, since they never appear as "part" of another word 
special_tokens = %w{-} 
# Builds a regex like /(\bVII\b|\bVI\b|-|)/ that wraps "word tokens" in a word boundary check 
token_regex = /(#{word_tokens.map{|t| /\b#{t}\b/}.join("|")}|#{special_tokens.join("|")})/ 
title = "ADVISORS-XI" 
title.split(token_regex).map{|s| s =~ token_regex ? s : s.titleize}.join 
+0

VI와 ADVISORS-XI 같은 이름은 무엇입니까? 가능한 해결책은 회사 이름을 단어로 분리 한 다음 제목을 지정하고 다시 집어 넣는 것입니다.하지만 분할 문자는 기억해야합니다. – justingordon

+0

예, 이것이이 코드의 기능입니다. 제목을 지정해서는 안되는 문자열을 토큰 정규식 (예 : IX)에 추가해야합니다. –

+0

나중에 코드를 사용해 보겠습니다.하지만 VI를 토큰으로 사용하면 AD, VI, SORS로 ADVISORS를 분할 한 다음 AD 및 SOR을 표제하는 것이 AdVISors가됩니다. 어쩌면 먼저 단어들로 나뉘어 ... – justingordon