首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby titleize /将“洛杉矶,ca”转换为“洛杉矶,CA”

Ruby titleize /将“洛杉矶,ca”转换为“洛杉矶,CA”
EN

Stack Overflow用户
提问于 2017-09-08 11:32:41
回答 3查看 57关注 0票数 0

我正在做一个使用用户输入的位置的项目,我正在寻找关于如何正确命名位置的建议,例如“洛杉矶,加州”。

使用Rails titleize时,我得到了“洛杉矶,Ca”(注意Ca中的小写字母a),这是意料之中的,我想知道获得该州正确大小写的最佳方法是什么(两个字母都大写)。

最初,我考虑在最后一个逗号中拆分,并将该段的所有字符大写,然后将其重新连接在一起,我认为这在大多数情况下都可以很好地工作,但我确信有一些边缘情况我没有考虑过。

以前有没有人这样做过,或者有一个好的解决方案?或者,如果split解决方案是最好的选择,那么得到一些反馈就更好了!

EN

回答 3

Stack Overflow用户

发布于 2017-09-08 13:45:37

如何匹配字符串末尾的两个字母代码?您可以只匹配大写字母后跟小写字母的任意两个字母的代码:

代码语言:javascript
复制
cities = [
  'Somewhere, Fo',
  'Here, Ba',
  'Los Angeles, Ca',
  'Los Angeles, CA',
  'City,In',
  'City,IN'
]

cities.each do |city|
  puts city.gsub(/([A-Z][a-z])\z/) { |match| match.upcase }
end

或者,如果这只适用于美国各州,并且由于这些州的数量是已知的和有限的,您可以替换这些州。

票数 0
EN

Stack Overflow用户

发布于 2017-09-08 15:12:09

在使用a = "Los Angeles, Ca":capitalize on input field之后,我们可以得到:a.split(",").length将判断它是否包含逗号分隔值,而a.split(",")[1].strip.length == 2将在删除空格后判断第二个值是否包含2个字符。

"#{a.split(",")[0]}, #{a.split(",")[1].strip.try(:upcase)}"如果两个条件都正确,这将给我们一个所需的值。

你可以把它写成:

final_value = (a.split(",").length == 2 and a.split(",")[1].strip.length == 2 ? "#{a.split(",")[0]}, #{a.split(",")[1].strip.try(:upcase)}" : a)

if a.split(",").length == 2 and a.split(",")[1].strip.length == 2 final_value = "#{a.split(",")[0]}, #{a.split(",")[1].strip.try(:upcase)}" else final_value = a end

尽管如此,我也愿意知道更好的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2017-09-08 15:31:32

您可以定义一个模式来匹配状态(不区分大小写):

代码语言:javascript
复制
states = /AL|AK|AZ|AR|CA|CO|CT|and_so_on/i

并用upcase-d版本替换字符串中的尾随状态:

代码语言:javascript
复制
location = 'los angeles, ca'
location.titleize.sub(/\b#{states}\z/, &:upcase)
#=> "Los Angeles, CA"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46108213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档