【问题标题】:Changing text based on the final letter of user name根据用户名的最后一个字母更改文本
【发布时间】:2019-05-04 20:55:35
【问题描述】:

在我的系统中,用户将注册他们的名字。在系统使用的自然语言中,名称的结尾根据其用途而有所不同,例如:

  • 谁:"name surname"
  • 与谁:"namai surnamai"

因此,我需要在某些地方更改@provider_user.name 的结尾;如果它以e 结尾,请将e 替换为ai

我的 HTML slim 代码是:

= render partial: 'services/partials/messages/original_message', locals: { header: t('html.text.consultation_with.for_provider', name: @provider_user.name)

它从 yml 文件中获取文本并使用 @provider_user.name

有解决此问题的建议吗?

【问题讨论】:

  • string.sub(/e$/, 'ai') 将用ai 替换结尾的e

标签: html ruby-on-rails ruby yaml slim


【解决方案1】:
"name surname".gsub(/e\b/, 'ai') # "namai surnamai"

.gsub 使用正则表达式在字符串中进行搜索和替换。它是.sub 的贪婪版本,意味着它将替换所有出现的事件。

\b 匹配任何单词边界。

【讨论】:

  • 谢谢你,成功了。附加问题 - 如何在同一条记录上扩展更多选项,例如:“e = ai, us = mi, i = as”?
  • 您能否建议如何将它用于多个选项 - 这对我有很大帮助。
  • 我认为你最好提出一个新问题,因为它与你原来的问题有很大不同
  • 谢谢,创建了一个新的:stackoverflow.com/questions/53633649/…
【解决方案2】:

试试这个,简单的单行代码

@provider_user.name.split.map {|w| (w.end_with?('e') ? (w.chomp(w[w.length - 1]) + 'ai') : w) }.join(" ")

我确定,它会将"name surname" 转换为"namai surnamai"

在其他情况下...

@provider_user.name.split.map {|w| (w.end_with?('e') ? (w.chomp(w[w.length - 1]) + 'ai') : (w.end_with?('us') ? (w.chomp(w[w.length - 1]) + 'mi') : (w.end_with?('i') ? (w.chomp(w[w.length - 1]) + 'as') : w))) }.join(" ")

【讨论】:

  • 谢谢 Vijay,效果也不错。附加问题 - 如何在同一记录上扩展更多选项,例如:“e = ai, us = mi, i = as”?
  • 感谢您的回复,但多个选项的解决方案似乎不起作用。当它尝试第二个选项时会抛出“出现问题”错误(在我的情况下,当我的用户名以“us”结尾时)
  • 嗨 Vijay,您能否查看多个选项的代码。它看起来很方便,但似乎不起作用。谢谢
【解决方案3】:

这真的很简单,这就是我喜欢 Ruby 的原因......

class String
    def replace_ends(replace, with) 
        end_array = self.split " "
        end_array.map! do |var|
            break unless var.end_with? replace
            var.chomp(" ").chomp(replace) + with
        end
        return end_array.join " "
    end
end

【讨论】:

  • 想试试这个选项。你建议我应该在哪个文件中定义它?
  • 我不知道,但是如果您在要放入的文件中执行此操作,它不会破坏 String 类。我只是要让它替换所有端。跨度>
  • 完成让它正常工作它应该像 var = var.replace_ends "11","12" 顺便说一句我已经在 jruby 中调试过它,所以在任何问题上都是 hmu
猜你喜欢
  • 2019-05-07
  • 1970-01-01
  • 2014-01-24
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多