【发布时间】:2015-07-02 20:41:17
【问题描述】:
我有这个代码
str = @universal_claim_form.errors.full_messages.join
str.gsub('Patient Contact Information: Value', 'Patient phone number') if str =~ /Patient Contact Information/
debugger
str.gsub("\\n", "<br/>")
debugger
flash.now[:error] = "Form has errors and was unable to be submitted.<br/> " << str
第一个 gsub 替换不需要的消息,第二个 gsub 用于用 html 换行符替换所有换行符
在调试器的第一行str = "PMP Validation failed. This happens when something you entered does not pass PMP specific validations.\\nPatient phone number: Value must be a 10 digit number"
在第二个调试器中该行没有改变
更奇怪的是,我在命令行的 irb 中执行了此操作,并且成功了
2.1.1 :001 > s = 'test'
=> "test"
2.1.1 :002 > s
=> "test"
2.1.1 :003 > s += '\ntest'
=> "test\\ntest"
2.1.1 :004 > s.gsub('\\n', '<br/>')
=> "test<br/>test"
2.1.1 :005 >
【问题讨论】:
-
gsub是非变异的,这意味着它只会返回str的副本,其中的字符被替换掉(如果你在 irb 中再次调用s,你会看到这一点,新行是再次回来)。您可以使用变异版本gsub!,它应该可以工作。同样使用gsub,我发现特殊字符在正则表达式中更具可读性,例如str.gsub!(/\n/,'<br/>')。最后请注意,如果没有替换,gsub!将返回nil,str将保持不变。
标签: ruby-on-rails ruby ruby-on-rails-3 replace gsub