仅将字符串的第一个字符大写并保留其他字符? (导轨)
我试图让 Rails 将字符串的第一个字符大写,并保留所有其他字符。我遇到了一个问题,“我来自纽约”变成了“我来自纽约”。
我将使用什么方法来选择第一个字符?
谢谢
编辑:我尝试实现 macek 建议的内容,但我收到了“未定义的方法`capitalize'”错误。代码在没有大写行的情况下工作正常。感谢您的帮助!
def fixlistname!
self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
self.title[0] = self.title[0].capitalize
errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with? 'You know you'
end
编辑2:让它工作。感谢您的帮助!
编辑3:等等,不,我没有...这是我的列表模型中的内容。
def fixlistname!
self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
self.title.slice(0,1).capitalize + self.title.slice(1..-1)
errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with? 'You know you'
end
编辑4:尝试了macek的编辑,但仍然收到未定义的方法`capitalize'“错误。我可能做错了什么?
def fixlistname!
self.title = title.lstrip
self.title += '...' unless title.ends_with?('...')
self.title[0] = title[0].capitalize
errors.add_to_base('Title must start with "You know you..."') unless title.starts_with?("You know you")
end
编辑5:这很奇怪。我可以通过使用下面的行来消除未定义的方法错误,问题是它似乎用数字替换了第一个字母,而不是大写y 在 You 中,它将 y 变成 121
self.title[0] = title[0].to_s.capitalize
I'm trying to get Rails to capitalize the first character of a string, and leave all the others the way they are. I'm running into a problem where "i'm from New York" gets turned into "I'm from new york."
What method would I use to select the first character?
Thanks
EDIT: I tried to implement what macek suggested, but I'm getting a "undefined method `capitalize'" error. The code works fine without the capitalize line. Thanks for the help!
def fixlistname!
self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
self.title[0] = self.title[0].capitalize
errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with? 'You know you'
end
EDIT 2: Got it working. Thanks for the help!
EDIT 3: Wait, no I didn't... Here's what I have in my list model.
def fixlistname!
self.title = self.title.lstrip + (title.ends_with?("...") ? "" : "...")
self.title.slice(0,1).capitalize + self.title.slice(1..-1)
errors.add_to_base("Title must start with \"You know you...\"") unless self.title.starts_with? 'You know you'
end
EDIT 4: Tried macek's edit, and still getting an undefined method `capitalize'" error. What could I be doing wrong?
def fixlistname!
self.title = title.lstrip
self.title += '...' unless title.ends_with?('...')
self.title[0] = title[0].capitalize
errors.add_to_base('Title must start with "You know you..."') unless title.starts_with?("You know you")
end
EDIT 5: This is weird. I'm able to get rid of the undefined method error by using the line below. The problem is that it seems to replace the first letter with a number. For example, instead of capitalizing the y in You, it turns the y into a 121
self.title[0] = title[0].to_s.capitalize
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(18)
这应该可以做到:
This should do it:
Titleize 会将每个单词大写。
这行代码感觉很重,但会保证唯一改变的字母是第一个字母。
更新:
Titleize will capitalise every word.
This line feels hefty, but will guarantee that the only letter changed is the first one.
Update:
自 Rails 开始5.0.0.beta4 您可以使用新的
String#upcase_first
方法或ActiveSupport::Inflector#upcase_first
来执行此操作。查看此博文了解更多信息信息。所以
会输出:
As of Rails 5.0.0.beta4 you can use the new
String#upcase_first
method orActiveSupport::Inflector#upcase_first
to do it. Check this blog post for more info.So
Will output:
您可以使用人性化。
如果您的文本行中不需要下划线或其他大写字母。
输入:
输出:
You can use humanize.
If you don't need underscores or other capitals in your text lines.
Input:
Output:
面向对象的解决方案:
那么你可以这样做:
An object oriented solution:
Then you can just do this:
编辑2
我似乎无法复制你的麻烦。继续运行这个本机 Ruby 脚本。它会生成您想要的确切输出,并且 Rails 支持所有这些方法。您遇到什么类型的输入问题?
输出
编辑
根据您的编辑,您可以尝试类似的操作。
原始
这将解决问题
当尝试使用
String#capitalize
在整个字符串上,您会看到
I'm from new york
因为该方法:Edit 2
I can't seem to replicate your trouble. Go ahead and run this native Ruby script. It generates the exact output your looking for, and Rails supports all of these methods. What sort of inputs are you having trouble with?
output
Edit
Based on your edit, you can try something like this.
Original
This will do the trick
When trying to use
String#capitalize
on the whole string, you were seeingI'm from new york
because the method:没有人提到 gsub,它可以让你简洁地做到这一点。
例子:
No-one's mentioned gsub, which lets you do this concisely.
Example:
这些答案中的大多数都在适当的位置编辑字符串,当您只是格式化视图输出时,您可能不想更改底层字符串,因此您可以在
dup
之后使用tap
获取编辑后的副本Most of these answers edit the string in place, when you are just formatting for view output you may not want to be changing the underlying string so you can use
tap
after adup
to get an edited copy当且仅当 OP 想要对 String 对象进行猴子修补时,才可以使用
现在使用它:
If and only if OP would want to do monkey patching on String object, then this can be used
Now use it:
更短的版本可能是:
An even shorter version could be:
请注意,如果您需要处理多字节字符,即如果您必须国际化您的站点,则
s[0] = ...
解决方案是不够的。这个 Stack Overflow 问题建议使用 unicode-util gemRuby 1.9:我怎样才能正确地大写&小写多字节字符串?
编辑
实际上,至少避免奇怪的字符串编码的更简单方法是仅使用 字符串#mb_chars:
Note that if you need to deal with multi-byte characters, i.e. if you have to internationalize your site, the
s[0] = ...
solution won't be adequate. This Stack Overflow question suggests using the unicode-util gemRuby 1.9: how can I properly upcase & downcase multibyte strings?
EDIT
Actually an easier way to at least avoid strange string encodings is to just use String#mb_chars:
从版本 5.2.3 开始,Rails 具有 upcase_first 方法。
例如,
"my Test string".upcase_first
将返回我的测试字符串
。Rails starting from version 5.2.3 has upcase_first method.
For example,
"my Test string".upcase_first
will returnMy Test string
.也许是最简单的方法。
Perhaps the easiest way.