在字符串中创建一个单词所有CAPS(从数据库返回时) - rails

时间:2016-01-09 19:42:12

标签: ruby-on-rails regex string

有没有办法在字符串中生成所有CAPS中的单个单词。该字段由表单从数据库返回。例如,我想要" Jane是最好的程序员"对于字符串" jane是最好的程序员"。

编辑:在视图中:<%= @sentence.capitalize %> "hello".gsub!('best','BEST') - 下面的第一个回复 - 不能解决这个问题。虽然这个问题被标记为&#39;正则表达式&#39;通过Stackoverflow,它是一个rails应用程序。

(并且,是的,如果我保存&#34; Jane是最好的程序员&#34;到数据库并且在没有titleizecapitalize的情况下返回它,我会得到&#34; Jane是最好的程序员&#34;。但是,这只是一个例子。在实际使用案例中,所有数据/字符串在保存之前都会转换为小写。我们希望将一些关键字大写以用于显示目的。)

titleize给了我Jane Is The Best Programmer

capitalize给了我Jane is the best programmer

获取Jane is the BEST programmer的解决方法是什么?

也许,解析字符串并在视图中重新组合它?虽然我宁愿在模型层中这样做。像%w{ keyword }.upcase这样的替代方案,我怀疑是使用复杂的正则表达式 - 我宁愿避免使用。

提前致谢!

2 个答案:

答案 0 :(得分:0)

对此的一个简单解决方案是将小写版本替换为单词的大写字母。您可以使用类似于以下代码的代码来完成它。

sentence.gsub! 'best', 'BEST'

答案 1 :(得分:0)

我想你可以做这样的事情。假设您有模型Profile

class Profile < ActiveRecord::Base

# attributes: id, about1, about2, ... etc.

# pretty much alias about1
def sentence1
  emphasize(about1)
end

private
def emphasize(sentence)
  keywords = %w{best awesome great}
  keywords.each do |w|
    re = /\b(#{w})\b/i
    if about1.match(re)  
      sentence.gsub!(re, w.upcase)
    end
  end 
  sentence
end

其中about1jane is the best programmer而您使用sentence1

它不是最漂亮的,也不是最高效的,但它应该有效。